Skip to content

Commit b7de2e2

Browse files
improve socket shutdown
1 parent 0300a39 commit b7de2e2

File tree

4 files changed

+20
-13
lines changed

4 files changed

+20
-13
lines changed

examples/example_servers.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,9 @@ def _process_message(self, obj):
6767

6868
for c in cPids:
6969
c.close()
70+
71+
time.sleep(5)
72+
logger.warning("Stopping server")
7073
server.stop()
7174
server.join()
75+
logger.warning("Example script exited")

jsocket/jsocket_base.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@
3131
logger = logging.getLogger("jsocket")
3232

3333
class JsonSocket(object):
34-
def __init__(self, address='127.0.0.1', port=5489):
34+
def __init__(self, address='127.0.0.1', port=5489, timeout=2.0):
3535
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3636
self.conn = self.socket
37-
self._timeout = None
37+
self._timeout = timeout
3838
self._address = address
3939
self._port = port
4040

@@ -74,17 +74,21 @@ def read_obj(self):
7474
return json.loads(str(msg[0],'ascii'))
7575

7676
def close(self):
77+
logger.debug("closing all connections")
78+
self._close_connection()
7779
self._close_socket()
78-
if self.socket is not self.conn:
79-
self._close_connection()
80-
80+
8181
def _close_socket(self):
8282
logger.debug("closing main socket")
83-
self.socket.close()
83+
if self.socket.fileno() != -1:
84+
self.socket.shutdown(socket.SHUT_RDWR)
85+
self.socket.close()
8486

8587
def _close_connection(self):
8688
logger.debug("closing the connection socket")
87-
self.conn.close()
89+
if self.conn.fileno() != -1:
90+
self.conn.shutdown(socket.SHUT_RDWR)
91+
self.conn.close()
8892

8993
def _get_timeout(self):
9094
return self._timeout
@@ -152,7 +156,7 @@ def connect(self):
152156
return True
153157
return False
154158

155-
159+
156160
if __name__ == "__main__":
157161
""" basic json echo server """
158162
import threading

jsocket/tserver.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def run(self):
7272
logger.exception(e)
7373
self._close_connection()
7474
break
75-
self.close()
75+
self._close_socket()
7676

7777
def start(self):
7878
""" Starts the threaded server.
@@ -124,11 +124,10 @@ def run(self):
124124
logger.debug("socket.timeout: %s" % e)
125125
continue
126126
except Exception as e:
127-
logger.info("client connection broken, closing socket")
128-
self._close_connection()
127+
logger.info("client connection broken, exit and close connection socket")
129128
self._isAlive = False
130129
break
131-
self.close()
130+
self._close_connection()
132131

133132
def start(self):
134133
""" Starts the factory thread.

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from setuptools import setup, Extension
44

55
setup(name='jsocket',
6-
version='1.9.1',
6+
version='1.9.2',
77
description='Python JSON Server & Client',
88
author='Christopher Piekarski',
99
author_email='[email protected]',

0 commit comments

Comments
 (0)