为什么关机报告错误?

时间:2012-12-17 13:25:23

标签: linux sockets tcp shutdown

Linux上的

我尝试了以下步骤:

  1. 创建TCP套接字,并连接到任何HTTP服务器
  2. 发送HTTP请求数据
  3. 使用SHUT_WR
  4. 关闭写入
  5. 从套接字读取以获取HTTP响应
  6. 使用SHUT_RD关闭读取
  7. 关闭套接字
  8. 此处在步骤5中发生错误,其中errno = ENOTCONN。当我尝试关机时,同样的错误在我看完EOF后写了。这是预期的吗?

1 个答案:

答案 0 :(得分:0)

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

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