Skip to content

Commit 12d086a

Browse files
committed
fix: add timeout to socket.recv
1 parent 91411ad commit 12d086a

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

src/balatrobot/client.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import re
77
import shutil
88
import socket
9+
import time
910
from pathlib import Path
1011
from typing import Self
1112

@@ -186,6 +187,9 @@ def send_message(self, name: str, arguments: dict | None = None) -> dict:
186187
logger.debug(f"Sending API request: {name}")
187188

188189
try:
190+
# Start timing measurement
191+
start_time = time.perf_counter()
192+
189193
# Send request
190194
message = request.model_dump_json() + "\n"
191195
self._socket.send(message.encode())
@@ -216,6 +220,18 @@ def send_message(self, name: str, arguments: dict | None = None) -> dict:
216220
logger.debug(f"API request {name} completed successfully")
217221
return response_data
218222

223+
except socket.timeout as e:
224+
# Calculate elapsed time and log timeout
225+
elapsed_time = time.perf_counter() - start_time
226+
logger.warning(
227+
f"Timeout on API request {name}: took {elapsed_time:.3f}s, "
228+
f"exceeded timeout of {self.timeout}s (port: {self.port})"
229+
)
230+
raise ConnectionFailedError(
231+
f"Socket timeout during communication: {e}",
232+
error_code="E008",
233+
context={"error": str(e), "elapsed_time": elapsed_time},
234+
) from e
219235
except socket.error as e:
220236
logger.error(f"Socket error during API request {name}: {e}")
221237
raise ConnectionFailedError(

0 commit comments

Comments
 (0)