-
Notifications
You must be signed in to change notification settings - Fork 384
Open
Description
#!/usr/bin/env python3
import logging
import random
import time
import websocket_server
def new_client(client, server):
server.send_message_to_all("Hey all, a new client has joined us")
server = websocket_server.WebsocketServer(host='127.0.0.1', port=13254, loglevel=logging.INFO)
server.set_fn_new_client(new_client)
server.run_forever(threaded=True)
m = f"foo {random.randint(1, 10000000)} {'x'*100000}"
while True:
server.send_message_to_all(m)Connected by custom client written in D programing language (dlang), and after receiving either 39104727 or 79208747 or 149915025 bytes of payload (application data length sum), server does this:
$ ./server_example.py
INFO:websocket_server.websocket_server:Listening on port 13254 for clients..
INFO:websocket_server.websocket_server:Starting WebsocketServer on thread Thread-1 (serve_forever).
INFO:websocket_server.websocket_server:Client closed connection.
Traceback (most recent call last):
File "/home/user/vps4/home/baryluk/Projects/prd-ng/./server_example.py", line 20, in <module>
server.send_message_to_all(m)
File "/home/user/.local/lib/python3.10/site-packages/websocket_server/websocket_server.py", line 81, in send_message_to_all
self._multicast(msg)
File "/home/user/.local/lib/python3.10/site-packages/websocket_server/websocket_server.py", line 199, in _multicast
self._unicast(client, msg)
File "/home/user/.local/lib/python3.10/site-packages/websocket_server/websocket_server.py", line 195, in _unicast
receiver_client['handler'].send_message(msg)
File "/home/user/.local/lib/python3.10/site-packages/websocket_server/websocket_server.py", line 344, in send_message
self.send_text(message)
File "/home/user/.local/lib/python3.10/site-packages/websocket_server/websocket_server.py", line 413, in send_text
self.request.send(header + payload)
BrokenPipeError: [Errno 32] Broken pipe
Technically there was a bug in my client (now fixed), but it should not cause the server to crash like this. Instead a connection should be closed, and message delivered to other clients, and send_message_to_all should not fail.
Metadata
Metadata
Assignees
Labels
No labels