观察开关插座问题

时间:2010-10-19 21:59:53

标签: sockets

最近我遇到了一个问题。我正在使用由其他人开发的两个程序A和B,它们使用TCP套接字相互通信,A是服务器,B是客户端。这就是我观察到的:当我同时启动A和B时,它们会相互运行和通信,如果我先杀死A,然后再次重新启动A,现在通过检查进程,A成功启动,但无法通过B连接,无论我重新启动B.但是,如果我继续杀死这个不可检测的A并再次启动A,它可以被B检测到。

同时,如果我在杀死A之前关闭B的套接字,那么当我启动A和B时,它们的效果非常好。

问题可能是什么,有什么方法可以在我杀死A时看到打开的套接字?

1 个答案:

答案 0 :(得分:0)

这取决于您使用的操作系统 lsof -p< pid>在UNIX上很常见,它允许您列出进程使用的所有文件描述符。 netstat可能可用,也将列出已打开的端口。

这可能是由于TIME_WAIT状态造成的。当您终止A时,服务器端口仍由操作系统分配,只有在打开服务器端口时A设置特定标志才能重用此端口(SO_REUSEADDR)时,才能重用该端口。否则,A将无法重新使用服务器端口,直到它被操作系统关闭(可能需要几分钟,这就是为什么当你继续杀死A时,某个时候,端口再次可用)。如果A无法打开服务器端口,我不知道A在做什么。