Getting Errno 9: Bad file descriptor in python socket

Question:

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"
Asked By: Mike Savi

||

Answers:

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.)

Answered By: abarnert

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
Answered By: mgrfn
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.