Bla*_*bel 26 c network-programming
我有一个TCP连接.服务器只是从客户端读取数据.现在,如果连接丢失,客户端在将数据写入管道(断开的管道)时将收到错误,但服务器仍会侦听该管道.如果连接是UP还是NOT,我能找到任何方法吗?
Sim*_*one 35
您可以像下面这样调用getsockopt:
int error = 0;
socklen_t len = sizeof (error);
int retval = getsockopt (socket_fd, SOL_SOCKET, SO_ERROR, &error, &len);
要测试套接字是否已启动:
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));
}
Chr*_*cke 12
只有这样,才能可靠地检测,如果仍然连接插座是定期尝试发送数据.它通常更方便地定义应用程序级别"平"包的客户端忽略,但如果该协议已经specced出无这样的能力,你应该能够配置TCP套接字通过设置要做到这一点SO_KEEPALIVE套接字选项.我已经联系到winsock的文档,但相同的功能应该是适用于所有类BSD插座栈.
TCP keepalive 套接字选项 (SO_KEEPALIVE) 在这种情况下会有所帮助,并在连接丢失的情况下关闭服务器套接字。