客户端阻塞读取调用,等待读取n个字节。
服务器写入n个字节并立即关闭连接。
在这种情况下,如果套接字在读取完成之前或由于其他问题而关闭,read调用可以返回负或零吗?(在本例中,客户机/服务器在相同的linux机器上运行)
我正在面对这样的场景,但不确定这在TCP/IP子系统中是如何工作的,以及如何解决它。
Sever:
write
close
Client:
read
close
如果我通过调用以下命令打开和关闭套接字
Socket s = new Socket( ... );
s.setReuseAddress(true);
in = s.getInputStream();
...
in.close();
s.close();
Linux声明此套接字仍处于打开状态,或者至少存在连接的文件描述符。当通过lsof查询该进程的打开文件时,有一个关闭连接的条目:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 9268 user 5u sock 0,4
我有一个使用POCO框架编写的C++服务器应用程序。在本例中,服务器应用程序充当HTTP服务器。有一个客户端应用程序,我不控制,也不能调试,这在服务器上造成了问题。客户端请求一个大文件,该文件作为HTTP响应返回。在文件返回期间,客户端关闭连接。我看到套接字移动到CLOSE_WAIT状态,表明客户端已经发送了一个FIN。问题是,在我的应用程序中,send()函数会挂起,导致我的一个HTTP线程基本上丢失,一旦所有线程都进入这种状态,服务器就会失去响应。
send代码位于POCO框架内,但如下所示:
do
{
if (_sockfd == POCO_INV
我最近读到,BSD kqueue可以处理各种事件,而不仅仅是文件描述符。但是对于Linux用户来说,它看起来像这样:(来自socketserver python )
#self being passed to select is a listening socket
try:
while not self.__shutdown_request:
# XXX: Consider using another file descriptor or
# connecting to the socket to wake this up instead of