Friday, 15 June 2012

How to close socket after python fail? -



How to close socket after python fail? -

first, encountered sockets in python , faced problem: when error in python code occurs, illustration syntax error before conn.close() on sec script start port in use. script finished, socket still open, kind of busy socket.

here error example:

web@web-x501a1 /var/www $ cd /home/web/www/public/py web@web-x501a1 ~/www/public/py $ python sockets.py connected: ('127.0.0.1', 47168) traceback (most recent phone call last): file "sockets.py", line 164, in <module> info = re.find('(<onvif>.*<\/onvif>)') attributeerror: 'module' object has no attribute 'find' web@web-x501a1 ~/www/public/py $ python sockets.py traceback (most recent phone call last): file "sockets.py", line 154, in <module> sock.bind(('', 9090)) file "/usr/lib/python2.7/socket.py", line 224, in meth homecoming getattr(self._sock,name)(*args) socket.error: [errno 98] address in utilize web@web-x501a1 ~/www/public/py $ python sockets.py traceback (most recent phone call last): file "sockets.py", line 154, in <module> sock.bind(('', 9090)) file "/usr/lib/python2.7/socket.py", line 224, in meth homecoming getattr(self._sock,name)(*args) socket.error: [errno 98] address in utilize

code:

sock = socket.socket(socket.af_inet, socket.sock_stream) sock.bind(('', 9090)) sock.listen(1) conn, addr = sock.accept() try: print 'connected:', addr buffer = '' while true: buffer += conn.recv(1024) info = re.find('(<code>.*<\/code>)', buffer) print info exit(); if not data: go on conn.send(data.upper()) except exception: pass finally: conn.close()

the problem here dirty socket closing occurs when script crashes without proper tcp connection shutdown sequence. thankfully there's simple solution tells kernel ignore fact socket in utilize (the port it's bound to):

sock.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

that's all, add together before bind phone call , you're set. debugging other errors much simpler , less time consuming 1 time that's done ;) see more in docs https://docs.python.org/2/library/socket.html#socket.socket.setsockopt

python sockets python-2.7

No comments:

Post a Comment