如何用Python强制操作系统释放端口
我在我的Python程序中使用了一个端口,然后把它关闭了,现在我想再次使用这个端口,而不是其他的端口。
有没有什么办法可以强制操作系统释放这个端口,让我在Python中再次使用?
#!/usr/bin/python # This is server.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12349
portt = 12341 # Reserve a port for your service.
s.bind((host, portt)) # Bind to the port
s.connect((host, port))
s.close
ss = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
ss.bind((host, portt))
s.close
但是输出是:
Traceback (most recent call last):
File "client.py", line 17, in <module>
ss.bind((host, portt))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use
1 个回答
4
你永远无法强迫操作系统(用任何合理的方式)释放一个套接字。
相反,你只需要通过setsockopt
来告诉它你不在乎。
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
这意味着这个选项是在Socket Object Level SOCKET层面上设置的(而不是TCP或其他什么),你正在设置Socket Option REUSEADDR(也就是在告诉操作系统,没问题,你确实想在这里监听)。最后,你用1
来打开这个选项,而不是用0
来关闭它。