因为,你把服务端进程关闭,已经与客户端建立好的tcp连接当前还没有完全关闭。当前服务端的tcp连接应该处于FIN_WAIT2状态,虽然该tcp连接已经与进程之间没有关系了(当前连接处于orphaned),但是操作系统还是会为这个连接维持内核的数据结构,而该连接的local port就是服务端的listen port,所以当你用socket去bind这个port的时候,操作系统会提示你说 Address already in use 。FIN_WAIT2状态的连接有定时器,应该和TIME_WAIT的时间长度相同,都是2MSL。超过了这段时间后,FIN_WAIT2的连接就会被操作系统移除。同样local port就不会被占用了,这样bind就能够成功了。