Save current changes before reorganizing drivers and cleaning workspace

This commit is contained in:
Adolfo Reyna
2026-06-17 22:17:59 -04:00
parent 3356e5d4a2
commit 2813c11104
21 changed files with 2904 additions and 132 deletions
+59 -3
View File
@@ -136,6 +136,46 @@ class VideoStreamServer:
except Exception as e:
print(f"Failed to start UDP stream server: {e}")
def restart_tcp_server(self):
"""Re-initializes the TCP stream server socket after a fatal error."""
print("Restarting TCP Stream Server...")
self.close_tcp_client()
try:
if self.tcp_server:
self.tcp_server.close()
except:
pass
self.tcp_server = None
time.sleep_ms(100)
try:
self.tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.tcp_server.bind(('', self.tcp_port))
self.tcp_server.listen(1)
self.tcp_server.setblocking(False)
print(f"TCP Stream Server restarted on port {self.tcp_port}")
except Exception as e:
print(f"Failed to restart TCP stream server: {e}")
def restart_udp_sock(self):
"""Re-initializes the UDP stream server socket after a fatal error."""
print("Restarting UDP Stream Server...")
try:
if self.udp_sock:
self.udp_sock.close()
except:
pass
self.udp_sock = None
time.sleep_ms(100)
try:
self.udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.udp_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.udp_sock.bind(('', self.udp_port))
self.udp_sock.setblocking(False)
print(f"UDP Stream Server restarted on port {self.udp_port}")
except Exception as e:
print(f"Failed to restart UDP stream server: {e}")
def update(self):
"""Updates connection states and checks for incoming video data.
Call this periodically in the main execution loop.
@@ -195,7 +235,16 @@ class VideoStreamServer:
self._draw_frame()
self.chunks_received = 0 # Reset for next frame
except OSError as e:
break # EWOULDBLOCK (no data available)
import errno
err = getattr(e, 'errno', None)
if err is None and e.args:
err = e.args[0]
ewouldblock = getattr(errno, 'EWOULDBLOCK', errno.EAGAIN)
if err in (errno.EAGAIN, ewouldblock) or err is None:
break # EAGAIN/EWOULDBLOCK (no data available)
print(f"Fatal UDP socket error in update(): {e}. Re-initializing UDP socket...")
self.restart_udp_sock()
break
# 3. Handle TCP stream
if self.tcp_server:
@@ -208,8 +257,15 @@ class VideoStreamServer:
self.active = True
self.last_packet_time = now
print(f"TCP Stream client connected from: {addr}")
except OSError:
pass
except OSError as e:
import errno
err = getattr(e, 'errno', None)
if err is None and e.args:
err = e.args[0]
ewouldblock = getattr(errno, 'EWOULDBLOCK', errno.EAGAIN)
if err not in (errno.EAGAIN, ewouldblock) and err is not None:
print(f"Fatal TCP stream server socket error in accept(): {e}. Re-initializing...")
self.restart_tcp_server()
# If client is connected, read data
if self.tcp_client is not None: