当python实现socket server,并且在ubuntu环境下运行时,当重启socket server时,发现老端口没有被立即释放,导致新server无法使用老socket server端口,导致报错。
解决方法:
tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
tcp_server.setblocking(False)
主要通过设置setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)实现。
SO_REUSEADDR 是一个常见的套接字选项,在套接字关闭后允许重用地址。通常情况下,如果一个套接字关闭后,该套接字使用的地址(IP 地址和端口号)在一段时间内(称为 TIME_WAIT 状态)不能立即被再次使用,但设置了 SO_REUSEADDR 选项后,可以立即重用地址,这对于服务器程序在关闭后立即重启并绑定到相同的地址上是非常有用的。