web-dev-qa-db-ja.com

Errno 9の取得:pythonソケットの不正なファイル記述子

私のコードはこれです:

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)

最初の実行では正常に動作しますが、その後は毎回Errno 9が表示されます。私は何を間違えていますか?

ところで、

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

閉じたのと同じソケットでconnectを呼び出しています。それはできません。

ドキュメントcloseの場合:

ソケットオブジェクトに対する今後の操作はすべて失敗します。

s = socket.socket()(またはあなたが持っているもの)をループに移動するだけです。 (または、必要に応じて、 create_connection 2段階で行うのではなく、これにより間違えにくくなり、IPv4とIPv6などを推測する必要がなくなります。

50
abarnert

私は過去にこの問題を解決しました、

再度接続する前にこれを作成する必要があります。

    s = socket(AF_INET, SOCK_STREAM)

続行するよりも:

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