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

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -