Wie man socket.listen (1) Arbeit für einige Zeit zu machen und dann der Code weiter ruhen?

StackOverflow https://stackoverflow.com/questions/2444178

  •  20-09-2019
  •  | 
  •  

Frage

Ich mache Server, der einen TCP-Socket und Arbeit über Port-Bereich macht, mit jedem Port für einige Zeit auf diesem Port zuhört, dann weiter den Rest des Codes.

wie folgt ::

import socket

sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sck.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

msg =''
ports = [x for x in xrange(4000)]
while True:
    try:
        for i in ports:
            sck.bind(('',i))
            ## sck.listen(1)
            ## make it just for some time and then continue this

            ## if there a connection do this
                conn, addr = sck.accept()
                msg = conn.recv(2048)
                ## do something
            ##if no connection continue the for loop
            conn.close()
    except KeyboardInterrupt:
        exit()

Wie so konnte ich sck.listen (1) Arbeit nur für einige Zeit ??

make
War es hilfreich?

Lösung

Sie können setTimeout auf die Buchse auf die maximale Menge an Zeit, die Sie auf sie jedes Mal warten wollen (es wieder aufrufen, bevor jeder listen auf die Zeit, die Sie warten möchten diese Mal) - Sie eine Ausnahme erhalten werden, socket.timeout , wenn die Zeit abgelaufen ist, so sicher sein, einen try / except socket.timeout: um es zu haben, um diesen Fall zu fangen. (A select.select mit einem Timeout würde auch funktionieren, und hat den Vorteil, dass sie auf mehreren Steckdosen und für verschiedene Bedingungen warten, aber es ist ein bisschen weniger direkt als Antwort auf Ihre ganz spezielle Frage).

Ich habe viele downvotes letzte Mal, dass ich eine solche Antwort gab ... vermutlich von Puristen, die sicher niemand machen wollen, überhaupt, Programme, wie sie von mißbilligen (zB durch eine sehr eigenartige Konstrukt wie bei Ihnen in Bezug auf die viele gegen normal, übliche Art des Schreibens Server). Mal sehen, was dieses Mal passiert, um -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top