From b955a03a2d2146a705ac4d19047cc26b38cdd878 Mon Sep 17 00:00:00 2001 From: Eugene Crosser Date: Thu, 16 Jun 2022 23:17:25 +0200 Subject: [PATCH] collector: enable SO_KEEPALIVE on accepted conn. Terminals have a bad habit to drop off the network without closing the connection. That will leave the server with orphan connections accumulating over time. --- gps303/collector.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gps303/collector.py b/gps303/collector.py index c2efd79..ef80cc5 100644 --- a/gps303/collector.py +++ b/gps303/collector.py @@ -3,7 +3,14 @@ from configparser import ConfigParser from logging import getLogger from os import umask -from socket import socket, AF_INET6, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR +from socket import ( + socket, + AF_INET6, + SOCK_STREAM, + SOL_SOCKET, + SO_KEEPALIVE, + SO_REUSEADDR, +) from struct import pack from time import time from typing import Dict, List, Optional, Tuple @@ -206,6 +213,7 @@ def runserver(conf: ConfigParser, handle_hibernate: bool = True) -> None: break elif sk == tcpfd: clntsock, clntaddr = tcpl.accept() + clntsock.setsockopt(SOL_SOCKET, SO_KEEPALIVE, 1) topoll.append((clntsock, clntaddr)) elif fl & zmq.POLLIN: received = clients.recv(sk) -- 2.43.0