如果bind,listen或accept失败,套接字会发生什么

时间:2016-05-16 03:08:10

标签: sockets

当我读到APUE时,它说

  

SUS警告如果连接失败,套接字的状态是未定义的

但是如果bind,listen或accept失败,则没有关于套接字状态的具体描述。 所以我想知道如果bind,listen或accept失败,套接字是否仍然有效?

1 个答案:

答案 0 :(得分:4)

  • 如果bind()失败,则不受约束。您可以再次致电bind()connect()
  • 如果listen()失败则无法收听。您可以连接它,或者如果您感到幸运,请再次尝试listen()
  • 如果accept()失败,它仍然在听。
  • connect()是所有这些的例外。你所能做的就是关闭它。

请注意,在所有情况下,套接字仍然有效'。只是在连接失败后它无法使用。你仍然需要关闭它。 [原因,或至少是 原因,它可能已自动绑定到选择作为到达所需连接目标的路径的一部分的本地接口,这可能不适合后续连接到另一个目标。]