7

I've recently been learning python and I just started playing with networking using python's socket library. Everything has been going well until recently when my script terminated without closing the connection. The next time I ran the script, I got:

File "./alert_server.py", line 9, in <module>
 s.bind((HOST, PORT))
File "<string>", line 1, in bind
socket.error: (98, 'Address already in use')

So it seems that something is still binded to the port, even though the python script isn't running (and I've verified this using $px aux. What's weird is that after a minute or so, I can run the script again on the same port and it will be fine. Is there any way to prevent/unbind a port for when this happens in the future?

asked Mar 3, 2009 at 22:46

1 Answer 1

17

What you want to do is just before the bind, do:

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

The reason you are seeing the behaviour you are is that the OS is reserving that particular port for some time after the last connection terminated. This is so that it can properly discard any stray further packets that might come in after the application has terminated.

By setting the SO_REUSEADDR socket option, you are telling the OS that you know what you're doing and you still want to bind to the same port.

answered Mar 3, 2009 at 22:55
Sign up to request clarification or add additional context in comments.

1 Comment

Also, you might want to call shutdown() and close() on the socket.

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.