在史蒂文的“The Socket:Networking 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.
因此,您引用的段落与此规范一致.它在您的机器上运行的事实并不意味着您的程序是可移植的.