gpt4 book ai didi

c - connect() 失败后,socket 是否无法使用?

转载 作者:IT王子 更新时间:2023-10-29 00:26:18 24 4
gpt4 key购买 nike

在 Steven 的“套接字:网络 API,第三版”的第 4 章第 4.3 段中,作者陈述如下

If connect fails, the socket is no longer usable and must be closed.We cannot call connect again on the socket.

有人知道上述说法背后的原因吗?

在我自己的实验中,我编写了一个简单的 TCP 客户端,它将在主机 A 上运行,并编写了一个简单的 TCP 服务器,它将在主机 B 上运行。TCP 客户端将永远尝试连接到主机 B 上的 TCP 服务器。

所以,我在主机 B 上启动了服务器。从主机上拔下网络线。然后我在主机 A 上启动了客户端。在同一个套接字上进行了大约 9 次不成功的连接尝试后,我将网络线重新插入服务器主机。客户端连接成功,愉快地以80K/秒的速度发送消息。

在另一个实验中,在最初成功连接并交换了几百万条消息之后,我从服务器主机上拔下了电线。然后,几分钟后,我连接了电线,消息流在同一个套接字上恢复。

最佳答案

POSIX 2001 says在信息部分:

If connect() fails, the state of the socket is unspecified. Conforming applications should close the file descriptor and create a new socket before attempting to reconnect.

因此您引用的段落与此规范一致。它在您的机器上运行的事实并不意味着您的程序是可移植的。

关于c - connect() 失败后,socket 是否无法使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13109899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com