首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C中找到套接字的连接状态?

如何在C中找到套接字的连接状态?
EN

Stack Overflow用户
提问于 2010-11-10 15:10:14
回答 11查看 117.9K关注 0票数 36

我有一个TCP连接。服务器只是从客户端读取数据。现在,如果连接丢失,客户端将在将数据写入管道(断开的管道)时出现错误,但服务器仍会侦听该管道。有什么方法可以找到连接是否正常吗?

EN

回答 11

Stack Overflow用户

发布于 2010-11-10 15:14:18

你可以像下面这样调用getsockopt:

代码语言:javascript
复制
int error = 0;
socklen_t len = sizeof (error);
int retval = getsockopt (socket_fd, SOL_SOCKET, SO_ERROR, &error, &len);

要测试套接字是否已启动,请执行以下操作:

代码语言:javascript
复制
if (retval != 0) {
    /* there was a problem getting the error code */
    fprintf(stderr, "error getting socket error code: %s\n", strerror(retval));
    return;
}

if (error != 0) {
    /* socket has a non zero error status */
    fprintf(stderr, "socket error: %s\n", strerror(error));
}
票数 43
EN

Stack Overflow用户

发布于 2010-11-10 16:10:16

可靠地检测套接字是否仍在连接的唯一方法是定期尝试发送数据。定义一个客户端忽略的应用层'ping‘数据包通常更方便,但是如果协议已经被指定为没有这样的功能,你应该能够通过设置SO_KEEPALIVE套接字选项来配置tcp套接字来做到这一点。我已经链接到winsock文档,但是所有类似于BSD的套接字堆栈都应该提供相同的功能。

票数 15
EN

Stack Overflow用户

发布于 2010-11-10 16:09:40

TCP保持连接套接字选项(SO_KEEPALIVE)将在这种情况下提供帮助,并在连接丢失的情况下关闭服务器套接字。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4142012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档