1

在 Linux 上,我尝试了以下步骤:

  1. 创建 TCP 套接字,并连接到任何 HTTP 服务器
  2. 发送 HTTP 请求数据
  3. 使用 SHUT_WR 关闭写入
  4. 从套接字读取以获取 HTTP 响应
  5. 使用 SHUT_RD 关闭读取
  6. 关闭套接字

这里错误发生在第 5 步,errno=ENOTCONN。当我在阅读 EOF 后尝试关闭 Write 时,同样的错误击中了我。这是预期的吗?

4

1 回答 1

0

在第 4 步中,如果您在 recv() 或 read() 上循环直到它返回 0,那么您已经消耗了套接字关闭的另一半。除了这次它是由远程端发起的。这可能解释了为什么第 5 步返回错误 - 因为远程端点已经关闭了连接的那一侧,所以没有什么可以关闭的。

在任何情况下,您都不需要第 5 步,因为您在第 6 步中关闭了套接字。“关闭”将关闭 TCP 连接的其余部分并关闭套接字文件描述符。

于 2012-12-17T18:12:33.517 回答