Python asyncore socket,端口无法重用

时间:2015-10-21 00:27:48

标签: python sockets

这是我的服务器代码,我已经写过self.set_reuse_addr()

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

有没有人知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用 SO_REUSEADDR

  1. 允许绑定到 0.0.0.0:port AND 192.168.11.2:port
  2. 允许在TIME_WAIT中绑定到套接字但无法建立与前一个TIME_WAIT套接字所在的目标 addr:port 的连接。
  3. SO_REUSEPORT 将允许这样做(为多个进程重用addr:port),但需要注意客户端CONNECT可能导致EADDRINUSE,因为它无法区分旧的套接字信息和新的套接字信息

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