Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Poort hergebruiken  (gelezen 1423 keer)

Poort hergebruiken
« Gepost op: 2012/03/13, 16:07:52 »
Hallo,

Het is niet écht een programmeerfout ofzo, maar ik heb dus volgend pythonscriptje ergens gevonden:

Citaat
import SocketServer

class MyTCPHandler(SocketServer.BaseRequestHandler):
    """
    The RequestHandler class for our server.

    It is instantiated once per connection to the server, and must
    override the handle() method to implement communication to the
    client.
    """

    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        print "{} wrote:".format(self.client_address[0])
        print self.data
        # just send back the same data, but upper-cased
        self.request.sendall(self.data.upper())

if __name__ == "__main__":
    HOST, PORT = "localhost", 9999

    # Create the server, binding to localhost on port 9999
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)

    # Activate the server; this will keep running until you
    # interrupt the program with Ctrl-C
    server.serve_forever()

werkt perfect, maar als ik het programmatje afsluit, en ik wil het opnieuw starten, gaat dat niet, omdat de poort niet mooi is afgesloten, nu weet ik niet hoe ik die kan vrijgeven?

Dank iedereen voor het meedenken.

Re: Poort hergebruiken
« Reactie #1 Gepost op: 2012/03/13, 16:34:55 »
server.shutdown() aanroepen bij het afsluiten?

http://docs.python.org/library/socketserver.html


Re: Poort hergebruiken
« Reactie #2 Gepost op: 2012/03/13, 22:02:17 »
* SeySayux kucht en wijst naar RAII
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Poort hergebruiken
« Reactie #3 Gepost op: 2012/03/15, 18:50:27 »
aanvullend:

onderliggende probleem is eigenlijk dat TCP verbindingen
in een TIME_WAIT state gaan staan na hun beëindiging,
met de SO_REUSEADDR optie kan je hergebruik direct forceren:
http://www.unixguide.net/network/socketfaq/4.5.shtml
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Re: Poort hergebruiken
« Reactie #4 Gepost op: 2012/03/15, 19:01:13 »
Volgende commando zal nog lopende programma's op de gegeven poort afsluiten:
fuser -k 9999/tcp