web-dev-qa-db-fra.com

Obtenir Errno 9: descripteur de fichier incorrect dans la prise python

Mon code est le suivant:

while 1:
    # Determine whether the server is up or down
    try:
        s.connect((mcip, port))
        s.send(magic)
        data = s.recv(1024)
        s.close()
        print data
    except Exception, e:
        print e
    sleep(60)

Cela fonctionne très bien lors de la première manche, mais me donne Errno 9 à chaque fois par la suite. Qu'est-ce que je fais mal?

BTW,

mcip = "mau5ville.com"
port = 25565
magic = "\xFE"
26
Mike Savi

Vous appelez connect sur le même socket que vous avez fermé. Tu ne peux pas faire ça.

Quant à les docs pour close dites:

Toutes les opérations futures sur l'objet socket échoueront.

Déplacez simplement la s = socket.socket() (ou tout ce que vous avez) dans la boucle. (Ou, si vous préférez, utilisez create_connection au lieu de le faire en deux étapes, ce qui rend plus difficile de se tromper, ce qui signifie que vous n'avez pas à deviner IPv4 vs IPv6, etc.)

50
abarnert

j'ai résolu ce problème par le passé,

vous devez le faire avant de vous reconnecter:

    s = socket(AF_INET, SOCK_STREAM)

que de continuer avec:

    s.connect((mcip, port))
    s.send(magic)
    data = s.recv(1024)
    s.close()
    print dat
1
mgrfn