如何在读取完成之前远程服务器关闭套接字时如何处理C中的套接字读取?

时间:2013-07-16 04:16:04

标签: c sockets tcp network-programming client-server

读取调用上的客户端阻塞等待读取n个字节。

服务器写入n个字节并立即关闭连接。

如果套接字在读取完成之前关闭或由于某些其他问题,在这种情况下可以读取调用返回负数或零吗? (在这种情况下,客户端/服务器在同一个Linux机器上运行)

我正面临这样的情况,但不确定这在TCP / IP子系统中是如何工作的,以及如何解决它。

Sever:
write
close

Client:
read
close

2 个答案:

答案 0 :(得分:7)

关闭套接字连接的安全方法是首先调用shutdown来表示您不会写入,继续读取远程端发送的数据,然后关闭读取端并关闭套接字。如果在读取发送给您的数据之前关闭套接字,操作系统将重置连接(发送设置了RST标志的数据包),远程端将此解释为错误。

答案 1 :(得分:4)

TCP以串行方式处理连接,读取器按发件人传输的顺序处理所有内容。当发件人关闭连接时,阅读器在读完所有已发送的数据后将获得EOF,而不是之前。