diff --git a/core/tcpserver.py b/core/tcpserver.py index 4a5e816..b6a1bd4 100644 --- a/core/tcpserver.py +++ b/core/tcpserver.py @@ -1,7 +1,8 @@ import socket from utils.loggers import log import sys -import select +import threading + class TcpServer: @@ -19,6 +20,9 @@ def __init__(self, port, timeout): if not self.socket: return + log.info("Incoming connection accepted") + + threading.Thread(target=self.receive_data).start() self.forward_data() def connect_socket(self): @@ -29,6 +33,7 @@ def connect_socket(self): else: server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + try: server.setsockopt(socket.SOL_SOCKET, socket.TCP_NODELAY, 1) except socket.error: @@ -52,35 +57,28 @@ def connect_socket(self): raise - def forward_data(self): + def receive_data(self): + while(1): + self.socket_state = True + try: + data = '' + while 1: + packet = self.socket.recv(1024) + data += packet.decode() - log.info("Incoming connection accepted") + if len(packet) < 1024: + break - self.socket.setblocking(0) + sys.stdout.write(data) + sys.stdout.flush() + except socket.error: + self.socket_state = False - while(1): - read_ready, write_ready, in_error = select.select( - [self.socket, sys.stdin], [], [self.socket, sys.stdin]) - try: - buffer = self.socket.recv(100) - while(buffer != ''): + def forward_data(self): - self.socket_state = True + self.socket.setblocking(0) - sys.stdout.write(buffer) - sys.stdout.flush() - buffer = self.socket.recv(100) - if(buffer == ''): - return - except socket.error: - pass - while(1): - r, w, e = select.select([sys.stdin], [], [], 0) - if(len(r) == 0): - break - c = sys.stdin.read(1) - if(c == ''): - return - if(self.socket.sendall(c) != None): - return + while(1): + i = sys.stdin.read(1) + self.socket.sendall(i.encode())