From 725833ba1a83a725e29b0c91a9339003e585ed56 Mon Sep 17 00:00:00 2001 From: Brian Moran Date: Thu, 22 Feb 2024 18:39:55 -0800 Subject: [PATCH] listen on a particular interface --- pywsjtx/extra/simple_server.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pywsjtx/extra/simple_server.py b/pywsjtx/extra/simple_server.py index d416e43..eaaed42 100644 --- a/pywsjtx/extra/simple_server.py +++ b/pywsjtx/extra/simple_server.py @@ -20,6 +20,7 @@ class SimpleServer(object): def __init__(self, ip_address='127.0.0.1', udp_port=DEFAULT_UDP_PORT, **kwargs): self.timeout = None self.verbose = kwargs.get("verbose",False) + self.interface = kwargs.get("interface", "127.0.0.1") if kwargs.get("timeout") is not None: self.timeout = kwargs.get("timeout") @@ -33,17 +34,21 @@ class SimpleServer(object): self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) self.sock.bind((ip_address, int(udp_port))) else: - self.multicast_setup(ip_address, udp_port) + self.multicast_setup(ip_address, udp_port, self.interface) if self.timeout is not None: self.sock.settimeout(self.timeout) - def multicast_setup(self, group, port=''): - self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + def multicast_setup(self, group, port='', interface='127.0.0.1'): + print("Multicast setup addr %s port %s interface %s" % (group, port, interface)) + self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.sock.setsockopt(socket.SOL_IP, socket.IP_ADD_MEMBERSHIP + , socket.inet_aton(group) + socket.inet_aton(interface)) self.sock.bind(('', port)) - mreq = struct.pack("4sl", socket.inet_aton(group), socket.INADDR_ANY) - self.sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) + # TODO in the future be able to handle more than one address? + #mreq = struct.pack("4s4s", socket.inet_aton(group), socket.inet_aton(interface)) # INADDR_ANY) + #self.sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) def rx_packet(self): try: