读取调用上的客户端阻塞等待读取n个字节。
服务器写入n个字节并立即关闭连接。
如果套接字在读取完成之前关闭或由于某些其他问题,在这种情况下可以读取调用返回负数或零吗? (在这种情况下,客户端/服务器在同一个Linux机器上运行)
我正面临这样的情况,但不确定这在TCP / IP子系统中是如何工作的,以及如何解决它。
Sever:
write
close
Client:
read
close
答案 0 :(得分:7)
关闭套接字连接的安全方法是首先调用shutdown来表示您不会写入,继续读取远程端发送的数据,然后关闭读取端并关闭套接字。如果在读取发送给您的数据之前关闭套接字,操作系统将重置连接(发送设置了RST标志的数据包),远程端将此解释为错误。
答案 1 :(得分:4)
TCP以串行方式处理连接,读取器按发件人传输的顺序处理所有内容。当发件人关闭连接时,阅读器在读完所有已发送的数据后将获得EOF,而不是之前。