resolves the hostname once and use it throughout the package

this is more efficient and fails faster on error.

patch bump
This commit is contained in:
onyx-and-iris 2026-03-11 04:04:53 +00:00
parent c46ca8a8c8
commit 2794b14cf1
3 changed files with 11 additions and 8 deletions

View File

@ -1,6 +1,6 @@
[project] [project]
name = "vban-cmd" name = "vban-cmd"
version = "2.10.2" version = "2.10.3"
description = "Python interface for the VBAN RT Packet Service (Sendtext)" description = "Python interface for the VBAN RT Packet Service (Sendtext)"
authors = [{ name = "Onyx and Iris", email = "code@onyxandiris.online" }] authors = [{ name = "Onyx and Iris", email = "code@onyxandiris.online" }]
license = { text = "MIT" } license = { text = "MIT" }

View File

@ -36,6 +36,13 @@ class VbanCmd(abc.ABC):
for attr, val in kwargs.items(): for attr, val in kwargs.items():
setattr(self, attr, val) setattr(self, attr, val)
try:
self._host_ip = socket.gethostbyname(self.host)
except socket.gaierror as e:
raise VBANCMDConnectionError(
f'Unable to resolve hostname {self.host}'
) from e
self._framecounter = 0 self._framecounter = 0
self._framecounter_lock = threading.Lock() self._framecounter_lock = threading.Lock()
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
@ -136,14 +143,10 @@ class VbanCmd(abc.ABC):
try: try:
self.sock.sendto( self.sock.sendto(
VbanPing0Payload.create_packet(self._get_next_framecounter()), VbanPing0Payload.create_packet(self._get_next_framecounter()),
(socket.gethostbyname(self.host), self.port), (self._host_ip, self.port),
) )
self.logger.debug(f'PING sent to {self.host}:{self.port}') self.logger.debug(f'PING sent to {self.host}:{self.port}')
except socket.gaierror as e:
raise VBANCMDConnectionError(
f'Unable to resolve hostname {self.host}'
) from e
except Exception as e: except Exception as e:
raise VBANCMDConnectionError(f'PING failed: {e}') from e raise VBANCMDConnectionError(f'PING failed: {e}') from e
@ -201,7 +204,7 @@ class VbanCmd(abc.ABC):
framecounter=self._get_next_framecounter(), framecounter=self._get_next_framecounter(),
payload=payload, payload=payload,
), ),
(socket.gethostbyname(self.host), self.port), (self._host_ip, self.port),
) )
def _set_rt(self, cmd: str, val: Union[str, float]): def _set_rt(self, cmd: str, val: Union[str, float]):

View File

@ -33,7 +33,7 @@ class Subscriber(threading.Thread):
nbs, self._remote._get_next_framecounter() nbs, self._remote._get_next_framecounter()
) )
self._remote.sock.sendto( self._remote.sock.sendto(
sub_packet, (self._remote.host, self._remote.port) sub_packet, (self._remote._host_ip, self._remote.port)
) )
self.wait_until_stopped(10) self.wait_until_stopped(10)