Skip to content

Commit ea45134

Browse files
author
clowwindy
committed
fix workers
1 parent e113479 commit ea45134

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ script:
1111
- python test.py -c test/aes.json
1212
- python test.py -c test/salsa20.json
1313
- python test.py -c test/server-multi-passwd.json
14+
- python test.py -c test/workers.json

shadowsocks/server.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,13 @@ def handler(signum, frame):
299299
sys.exit()
300300
import signal
301301
signal.signal(signal.SIGTERM, handler)
302+
302303
# master
304+
for tcp_server in tcp_servers:
305+
tcp_server.server_close()
306+
for udp_server in udp_servers:
307+
udp_server.close()
308+
303309
for child in children:
304310
os.waitpid(child, 0)
305311
else:

shadowsocks/udprelay.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ def __init__(self, listen_addr='127.0.0.1', listen_port=1080,
137137
self._cache = lru_cache.LRUCache(timeout=timeout,
138138
close_callback=self._close_client)
139139
self._client_fd_to_server_addr = lru_cache.LRUCache(timeout=timeout)
140+
self._closed = False
140141

141142
addrs = socket.getaddrinfo(self._listen_addr, self._listen_port, 0,
142143
socket.SOCK_DGRAM, socket.SOL_UDP)
@@ -251,7 +252,7 @@ def _run(self):
251252
self._eventloop = eventloop.EventLoop()
252253
self._eventloop.add(server_socket, eventloop.POLL_IN)
253254
last_time = time.time()
254-
while True:
255+
while not self._closed:
255256
try:
256257
events = self._eventloop.poll(10)
257258
except (OSError, IOError) as e:
@@ -274,11 +275,17 @@ def _run(self):
274275
last_time = now
275276

276277
def start(self):
278+
if self._closed:
279+
raise Exception('closed')
277280
t = threading.Thread(target=self._run)
278281
t.setName('UDPThread')
279282
t.setDaemon(False)
280283
t.start()
281284
self._thread = t
282285

286+
def close(self):
287+
self._closed = True
288+
self._server_socket.close()
289+
283290
def thread(self):
284291
return self._thread

test/workers.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
"timeout":300,
77
"method":"aes-256-cfb",
88
"local_address":"127.0.0.1",
9-
"workers": 2
9+
"workers": 4
1010
}

0 commit comments

Comments
 (0)