diff --git a/aprs.py b/aprs.py index c625fea..3b9bdd3 100644 --- a/aprs.py +++ b/aprs.py @@ -160,12 +160,19 @@ class IS(object): try: self.sock = socket.create_connection(self.server, 15) # 15 seconds connection timeout + self.sock.settimeout(5) # 5 second timeout to receive server banner + self.sock.setblocking(True) + + self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) + self.sock.setsockopt(socket.SOL_TCP, socket.TCP_KEEPIDLE, 15) + self.sock.setsockopt(socket.SOL_TCP, socket.TCP_KEEPCNT, 3) + self.sock.setsockopt(socket.SOL_TCP, socket.TCP_KEEPINTVL, 5) if self.sock.recv(512)[0] != "#": raise ConnectionError("invalid banner from server") - self.sock.setblocking(True) + except Exception, e: self.close()