当前位置: 技术问答>linux和unix
[求助]关于SOCKET编程中close函数阻塞的问题。
来源: 互联网 发布时间:2017-02-18
本文导语: 在linux 2.4的socket编程中,遇到一个问题: if(close(client_sockfd)==-1) { pirntf("close client_sockfd err!"); } else { pirntf("close client_sockfd ok"); } 结果抓包发现FIN已经发出,但是没有打印任何信息。close函数阻塞了...
在linux 2.4的socket编程中,遇到一个问题:
if(close(client_sockfd)==-1)
{
pirntf("close client_sockfd err!");
}
else
{
pirntf("close client_sockfd ok");
}
结果抓包发现FIN已经发出,但是没有打印任何信息。close函数阻塞了?
有没有什么方式能让它强制关闭连接,而不阻塞?
它在什么条件下阻塞?还有没发送完成的数据?但是也应该在发FIN之前阻塞啊。
在linux的函数帮助中中也没有详细说明这一部分。(http://www.kernel.org/doc/man-pages/online/pages/man2/close.2.html#CONFORMING_TO)
或者谁能告诉我这个函数的详细手册能在哪查到。谢谢。
if(close(client_sockfd)==-1)
{
pirntf("close client_sockfd err!");
}
else
{
pirntf("close client_sockfd ok");
}
结果抓包发现FIN已经发出,但是没有打印任何信息。close函数阻塞了?
有没有什么方式能让它强制关闭连接,而不阻塞?
它在什么条件下阻塞?还有没发送完成的数据?但是也应该在发FIN之前阻塞啊。
在linux的函数帮助中中也没有详细说明这一部分。(http://www.kernel.org/doc/man-pages/online/pages/man2/close.2.html#CONFORMING_TO)
或者谁能告诉我这个函数的详细手册能在哪查到。谢谢。
|
是不是因为缓存的原因,导致输出没有显示?
加个换行符试试
printf("close client_sockfd okn");
加个换行符试试
printf("close client_sockfd okn");
|
++
close是不等待ACK的, 除非你设置了linger.