2

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

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

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

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

Sever:
write
close

Client:
read
close
4

2 回答 2

7

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

于 2013-07-16T06:10:12.207 回答
4

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

于 2013-07-16T04:18:13.353 回答