我正在编写一个客户端应用程序,该应用程序connect()
连接到服务器并在 for 循环中关闭它。
这connect()
是在阻塞模式下完成的,我发现一些connect()
调用在数千次成功后会阻塞大约3秒connect()
。我使用 tcpdump 并发现一些奇怪的结果:在我调用 后connect()
,大约 3 秒没有发送 SYN。
发生了什么?
附言。我使用的是 64 位 Ubuntu,内核 3.0.0-13。
答案1
bind
最有可能的是,您在打电话之前没有打电话connect
(这是正常的,并且没有理由您应该这样做)。所以之前connect
,有一个隐含的bind
。如果本地端口的可用范围已用尽,则bind
在等待端口时可能会发生阻塞。最好的解决方案取决于您想要做什么。请参阅我的评论,了解详细信息,我可以提出解决方法。