Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python TCPServer Address Reuse

import SocketServer
import sys
from Queue import *
import threading

class CustomTCPServer(SocketServer.TCPServer):
    def __init__(self, server_address, RequestHandlerClass, commandQueue=Queue):
        self.queue = commandQueue
        SocketServer.TCPServer.__init__(self, server_address, RequestHandlerClass, bind_and_activate=False)
        SocketServer.TCPServer.allow_reuse_address = True
        self.server_bind()
        self.server_activate()

class SingleTCPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        commandQueue = self.server.queue
        self.data = self.request.recv(1024).strip()
        try:
            commandQueue.put(self.data)
        except Queue.Empty:
            print 'Sorry.. Cannot accept any more.. Queue is full..'

def main():
    HOST = ''
    PORT = 50099
    commandQueue = Queue()
    server = CustomTCPServer((HOST, PORT), SingleTCPHandler, commandQueue)
    threadObject = threading.Thread(target=server.serve_forever)
        threadObject.setDaemon(True)
        threadObject.start()
    threadObject.join()

if __name__ == '__main__':
  main()

But whenever I run the code for second time I get the message that socket.error: [Errno 98] Address already in use

I am confused..

Any suggestion would be appreciated..

like image 948
user2922343 Avatar asked Sep 29 '26 01:09

user2922343


1 Answers

Instead of:

SocketServer.TCPServer.allow_reuse_address = True

Which sets the value on the base class that you've already subclassed yourself from, (and created an instance of),

Use:

self.allow_reuse_address = True
like image 170
synthesizerpatel Avatar answered Oct 01 '26 15:10

synthesizerpatel



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!