diff options
| author | UltraQbik <no1skill@yandex.ru> | 2024-08-24 21:28:54 +0300 |
|---|---|---|
| committer | UltraQbik <no1skill@yandex.ru> | 2024-08-24 21:28:54 +0300 |
| commit | 6fc286392d71e7e1351b5ffcf4e265c3ca475f01 (patch) | |
| tree | 235c988532a960d74579d2cd2df50434653976f9 /main.py | |
| parent | 1e29c48239f65946369c9f5275689a2420d320bb (diff) | |
| download | httpy-6fc286392d71e7e1351b5ffcf4e265c3ca475f01.tar.gz httpy-6fc286392d71e7e1351b5ffcf4e265c3ca475f01.zip | |
Change client handling
Previously _client_thread was checking for new data from client, which is very much useless, because the client will not send any data back twice. This commit removes the useless while loop that was there, as well as the thread that was started So currently, it's 1 thread per 1 request, which is how it should probably be
Diffstat (limited to 'main.py')
| -rw-r--r-- | main.py | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/main.py b/main.py index c2b9ba1..a2d3310 100644 --- a/main.py +++ b/main.py @@ -132,21 +132,14 @@ class HTTPServer: :param client: client ssl socket """ - # client.settimeout(5) - while not self.stop_event.is_set(): - try: - # get client's request - request = self._recv_request(client) - if request is None: - break - - threading.Thread(target=self._client_request_handler, args=[client, request], daemon=True).start() - except TimeoutError: - print("Client timeout") - break - except Exception as e: - print(e) - break + try: + request = self._recv_request(client) + if request is not None: + self._client_request_handler(client, request) + except TimeoutError: + print("Client timeout") + except Exception as e: + print(e) # close the connection once stop even was set or an error occurred client.close() @@ -175,8 +168,8 @@ class HTTPServer: # response.headers["Content-Encoding"] = "br" # elif "gzip" in supported_compressions: # response.headers["Content-Encoding"] = "gzip" - if response.headers.get("Content-Length") is None: - response.headers["Content-Length"] = len(response.data) + # if response.headers.get("Content-Length") is None: + # response.headers["Content-Length"] = len(response.data) if response.headers.get("Connection") is None: response.headers["Connection"] = "close" @@ -191,6 +184,9 @@ class HTTPServer: for packet in response.get_data_stream(): client.sendall(packet) + if self.stop_event.is_set(): + break + def _handle_get(self, client: ssl.SSLSocket, request: Request) -> Response: """ Handles GET / HEAD requests from a client |