windows - Python socket doesn't close connection properly -
i new socket programming , ran puzzling problem:
i have windows program cannot alter (proprietary software) tries connect specific ip , port tcp socket.
on linux box wrote little python script serve socket win prog. works fine until kill prog on linux. initial server socket doesn't close specified , cannot restart program until socket garbage collected.
if try same linux socket (in seperate python script) have no problems.
here minimal code example:
import socket server = socket.socket() server.bind(('192.168.0.111', 50001)) server.listen(1) conn, addr = server.accept() print 'connection established' running = true while running: try: data = conn.recv(4096) except keyboardinterrupt: conn.close() running = false else: if data: print data else: conn.close() running = false server.close()
if kill ctrl-c exits normally. upon restarting script socket.error stating address in use. after minute or program works again.
i tried shutdown before close (aka conn.shutdown(2) , server.shutdown...) has no effect.
is there better 'right' way close windows socket? miss fundamental sockets in general?
thanks!
edit: think saw answer here: what correct way close socket in python 2.6?
although i'm using python 2.5 might still work.
you experiencing time_wait
state of connected sockets. though you've closed socket, still has lingering consequences couple minutes. reasons this, socket flag can set disable behavior (so_reuseaddr), explained in unix guide socket faq.
in short,
server.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)
Comments
Post a Comment