From e3903c9f6416e397704f22f5e6600dd169e5d9b6 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Fri, 16 Oct 2015 00:35:37 +0300 Subject: [PATCH] socket: Allow connect() & bind() to take standard tuple of (host, port). --- socket/socket.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/socket/socket.py b/socket/socket.py index c97ccea3..dba932e7 100644 --- a/socket/socket.py +++ b/socket/socket.py @@ -7,6 +7,13 @@ IPPROTO_IP = 0 IP_ADD_MEMBERSHIP = 35 IP_DROP_MEMBERSHIP = 36 +def _resolve_addr(addr): + if isinstance(addr, bytes): + return addr + if len(addr) != 2: + raise NotImplementedError("Only IPv4 supported") + a = getaddrinfo(addr[0], addr[1], _socket.AF_INET) + return a[0][4] def inet_aton(addr): return inet_pton(AF_INET, addr) @@ -26,5 +33,11 @@ def create_connection(addr, timeout=None, source_address=None): class socket(_socket.socket): + def bind(self, addr): + return super().bind(_resolve_addr(addr)) + + def connect(self, addr): + return super().connect(_resolve_addr(addr)) + def sendall(self, *args): return self.send(*args)