Skip to content

Commit

Permalink
Merge pull request #1 from modularizer/modularizer-linux_fixes
Browse files Browse the repository at this point in the history
Modularizer linux fixes
  • Loading branch information
modularizer committed May 16, 2024
2 parents 76992c7 + 6e55731 commit 43102b9
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 12 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "socketwrench"
version = "1.8.6"
version = "1.8.7"
description = "A simple Python library for creating web servers and APIs using sockets, supporting openapi and swagger."
readme = "README.md"
authors = [{ name = "Torin Halsted", email = "modularizer@gmail.com" }]
Expand Down
26 changes: 17 additions & 9 deletions src/socketwrench/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

class Connection:
default_chunk_size: int = 1024
timeout = 5

def __init__(self,
handler,
Expand All @@ -24,16 +25,21 @@ def __init__(self,
self._rep = None

def handle(self):
request = self.receive_request(self.socket)
if self.check_cleanup():
return request, None, False
response = self.handler(request)
if self.check_cleanup():
return request, response, False
self.send_response(self.socket, response)
return request, response, True
try:
request = self.receive_request(self.socket)
if self.check_cleanup():
return request, None, False
response = self.handler(request)
if self.check_cleanup():
return request, response, False
self.send_response(self.socket, response)
return request, response, True
except Exception as e
self.close()
raise e

def receive_request(self, connection_socket: socket.socket, chunk_size: int = None) -> Request:
connection_socket.settimeout(self.timeout)
if chunk_size is None:
chunk_size = self.chunk_size

Expand Down Expand Up @@ -64,7 +70,8 @@ def receive_request(self, connection_socket: socket.socket, chunk_size: int = No
return r

def send_response(self, connection_socket: socket.socket, response: Response):
connection_socket.send(bytes(response))
connection_socket.sendall(bytes(response))
connection_socket.shutdown(socket.SHUT_WR) # seems to be needed for linux?
connection_socket.close()

def check_cleanup(self):
Expand All @@ -74,6 +81,7 @@ def check_cleanup(self):
return False

def close(self):
self.socket.shutdown(socket.SHUT_WR) # seems to be needed for linux?
self.socket.close()

def __repr__(self):
Expand Down
7 changes: 6 additions & 1 deletion src/socketwrench/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,12 @@ class Server(socket.socket):
default_backlog = 1
default_chunk_size = Connection.default_chunk_size
default_num_connection_threads = 1
default_socket_options = None
default_socket_options = {
socket.SOL_SOCKET: {
socket.SO_REUSEADDR: 1,
socket.SO_REUSEPORT: 1
}
}
default_pause_sleep = 0.1
default_accept_sleep = 0
default_favicon = RouteHandler.default_favicon
Expand Down
2 changes: 1 addition & 1 deletion src/socketwrench/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class Headers(dict):
def to_string(self) -> str:
s = ""
for k, v in self.items():
s += f"{k}: {v}\n"
s += f"{k}: {v}\r\n"
return s

def __str__(self):
Expand Down

0 comments on commit 43102b9

Please sign in to comment.