Mike Savi
Mike Savi

Reputation: 673

Getting Errno 9: Bad file descriptor in python socket

My code is this:

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)

It works fine on the first run, but gives me Errno 9 every time after. What am I doing wrong?

BTW,

mcip = "mau5ville.com"
port = 25565
magic = "\xFE"

Upvotes: 46

Views: 144314

Answers (2)

mgrfn
mgrfn

Reputation: 61

I resolved this problem in the past,

you have to create the socket before connect():

    s = socket(AF_INET, SOCK_STREAM)

then continue with:

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

Upvotes: 6

abarnert
abarnert

Reputation: 365707

You're calling connect on the same socket you closed. You can't do that.

As for the docs for close say:

All future operations on the socket object will fail.

Just move the s = socket.socket() (or whatever you have) into the loop. (Or, if you prefer, use create_connection instead of doing it in two steps, which makes this harder to get wrong, as well as meaning you don't have to guess at IPv4 vs. IPv6, etc.)

Upvotes: 73

Related Questions