2015-10-21 29 views
1

这是我的服务器代码,我已经写self.set_reuse_addr()Python的asyncore插槽,端口无法再次使用

class ImageServer(asyncore.dispatcher): 
    def __init__(self,port): 
     asyncore.dispatcher.__init__(self) 
     self.client = None  
     self.port = port 
     self.clientSocket = None 
     self.create_socket(socket.AF_INET, socket.SOCK_STREAM) 
     self.set_reuse_addr() 
     self.bind(("192.168.11.2",self.port)) 
     self.listen(20) 
     print "[*] Listening ..." 

仍然得到这个错误,端口复

self.bind(("192.168.11.2",self.port)) 

File "/usr/lib/python2.7/asyncore.py", line 342, in bind 
return self.socket.bind(addr) 

File "/usr/lib/python2.7/socket.py", line 228, in meth 
return getattr(self._sock,name)(*args) 

socket.error: [Errno 98] Address already in use 

是否有任何人知道如何解决这个问题?

回答

0

随着SO_REUSEADDR

  1. 使结合0.0.0.0:port192.168.11.2:port
  2. 使结合在TIME_WAIT套接字,但你不能建立到前一个TIME_WAIT套接字的相同目的地addr:端口的连接。

SO_REUSEPORT将允许这样做(重用地址:端口,用于多个进程),需要提醒的是一个客户端连接可能会导致EADDRINUSE因为它不能岁之间插座信息和新的区分。

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)