Skip to content

Commit 0627f69

Browse files
committed
fix proxy for transfer all data
1 parent ba64545 commit 0627f69

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/proxy.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from socketserver import BaseRequestHandler, TCPServer
1+
from socketserver import BaseRequestHandler, TCPServer, ThreadingMixIn
22
from socket import socket, AF_INET, SOCK_STREAM, gethostbyname, error
33
import threading
44
import logging
@@ -38,30 +38,38 @@ def handle(self):
3838
finally:
3939
sock.close()
4040

41-
def transferData(self, sock1 : socket, sock2 : socket, max_read_try = 1, receive_message_length = 4096):
41+
def transferData(self, sock1 : socket, sock2 : socket, max_read_try = 10, receive_message_length = 2048):
4242
read_try = 0
43+
last_try = False
4344
fcntl.fcntl(sock1, fcntl.F_SETFL, os.O_NONBLOCK)
4445
while True:
4546
try:
4647
msg = sock1.recv(receive_message_length)
4748
if not msg:
48-
break
49-
sock2.sendall(msg)
50-
if len(msg) < receive_message_length :
5149
return
50+
sock2.sendall(msg)
51+
52+
read_try = 0
53+
if last_try and len(msg) > 0:
54+
last_try = False
55+
if len(msg) < (receive_message_length / 2):
56+
if last_try:
57+
return
58+
else:
59+
last_try = True
5260
except error as e:
5361
err = e.args[0]
5462
if err == errno.EAGAIN or err == errno.EWOULDBLOCK:
5563
if read_try > max_read_try:
5664
return
5765
read_try += 1
58-
time.sleep(1)
66+
time.sleep(0.1)
5967
continue
6068
raise e
6169

70+
class ThreadedTCPServer(ThreadingMixIn, TCPServer):
71+
pass
6272

63-
64-
6573
class ProxyServer():
6674

6775
def __init__(self, proxy_host, proxy_port, type=ProxyType.TCP):
@@ -77,7 +85,7 @@ class ThreadedTcpProxyHandler(TcpProxySockHandler):
7785
PROXY_HOST = gethostbyname(proxy_host)
7886
PROXY_PORT = proxy_port
7987

80-
self.server = TCPServer((HOST, proxy_port), ThreadedTcpProxyHandler)
88+
self.server = ThreadedTCPServer((HOST, proxy_port), ThreadedTcpProxyHandler)
8189
self.ip, self.port = self.server.server_address
8290
self.logger.info("Creating %s proxy server with listen on %s and proxy to %s:%s", type, proxy_port, proxy_host, proxy_port)
8391

0 commit comments

Comments
 (0)