def getaddrinfo(space, w_host, w_port, family=rsocket.AF_UNSPEC, socktype=0, proto=0, flags=0): """getaddrinfo(host, port [, family, socktype, proto, flags]) -> list of (family, socktype, proto, canonname, sockaddr) Resolve host and port into addrinfo struct. """ # host can be None, string or unicode if space.is_w(w_host, space.w_None): host = None elif space.is_true(space.isinstance(w_host, space.w_str)): host = space.str_w(w_host) elif space.is_true(space.isinstance(w_host, space.w_unicode)): w_shost = space.call_method(w_host, "encode", space.wrap("idna")) host = space.str_w(w_shost) else: raise OperationError(space.w_TypeError, space.wrap( "getaddrinfo() argument 1 must be string or None")) # port can be None, int or string if space.is_w(w_port, space.w_None): port = None elif space.is_true(space.isinstance(w_port, space.w_int)): port = str(space.int_w(w_port)) elif space.is_true(space.isinstance(w_port, space.w_str)): port = space.str_w(w_port) else: raise OperationError(space.w_TypeError, space.wrap("Int or String expected")) try: lst = rsocket.getaddrinfo(host, port, family, socktype, proto, flags) except SocketError, e: raise converted_error(space, e)
def gethostname(space): """gethostname() -> string Return the current host name. """ try: res = rsocket.gethostname() except SocketError, e: raise converted_error(space, e)
def gethostname(space): """gethostname() -> string Return the current host name. """ try: res = rsocket.gethostname() except SocketError, e: raise converted_error(space, e)
def getprotobyname(space, name): """getprotobyname(name) -> integer Return the protocol number for the named protocol. (Rarely used.) """ try: proto = rsocket.getprotobyname(name) except SocketError, e: raise converted_error(space, e)
def _ssl_seterror(space, ss, ret): assert ret <= 0 if ss is None: errval = libssl_ERR_peek_last_error() errstr = rffi.charp2str(libssl_ERR_error_string(errval, None)) return ssl_error(space, errstr, errval) elif ss.ssl: err = libssl_SSL_get_error(ss.ssl, ret) else: err = SSL_ERROR_SSL errstr = "" errval = 0 if err == SSL_ERROR_ZERO_RETURN: errstr = "TLS/SSL connection has been closed" errval = PY_SSL_ERROR_ZERO_RETURN elif err == SSL_ERROR_WANT_READ: errstr = "The operation did not complete (read)" errval = PY_SSL_ERROR_WANT_READ elif err == SSL_ERROR_WANT_WRITE: errstr = "The operation did not complete (write)" errval = PY_SSL_ERROR_WANT_WRITE elif err == SSL_ERROR_WANT_X509_LOOKUP: errstr = "The operation did not complete (X509 lookup)" errval = PY_SSL_ERROR_WANT_X509_LOOKUP elif err == SSL_ERROR_WANT_CONNECT: errstr = "The operation did not complete (connect)" errval = PY_SSL_ERROR_WANT_CONNECT elif err == SSL_ERROR_SYSCALL: e = libssl_ERR_get_error() if e == 0: if ret == 0 or space.is_w(ss.w_socket, space.w_None): errstr = "EOF occurred in violation of protocol" errval = PY_SSL_ERROR_EOF elif ret == -1: # the underlying BIO reported an I/0 error error = rsocket.last_error() return interp_socket.converted_error(space, error) else: errstr = "Some I/O error occurred" errval = PY_SSL_ERROR_SYSCALL else: errstr = rffi.charp2str(libssl_ERR_error_string(e, None)) errval = PY_SSL_ERROR_SYSCALL elif err == SSL_ERROR_SSL: e = libssl_ERR_get_error() errval = PY_SSL_ERROR_SSL if e != 0: errstr = rffi.charp2str(libssl_ERR_error_string(e, None)) else: errstr = "A failure in the SSL library occurred" else: errstr = "Invalid error code" errval = PY_SSL_ERROR_INVALID_ERROR_CODE return ssl_error(space, errstr, errval)
def getprotobyname(space, name): """getprotobyname(name) -> integer Return the protocol number for the named protocol. (Rarely used.) """ try: proto = rsocket.getprotobyname(name) except SocketError, e: raise converted_error(space, e)
def _ssl_seterror(space, ss, ret): assert ret <= 0 if ss is None: errval = libssl_ERR_peek_last_error() errstr = rffi.charp2str(libssl_ERR_error_string(errval, None)) return ssl_error(space, errstr, errval) elif ss.ssl: err = libssl_SSL_get_error(ss.ssl, ret) else: err = SSL_ERROR_SSL errstr = "" errval = 0 if err == SSL_ERROR_ZERO_RETURN: errstr = "TLS/SSL connection has been closed" errval = PY_SSL_ERROR_ZERO_RETURN elif err == SSL_ERROR_WANT_READ: errstr = "The operation did not complete (read)" errval = PY_SSL_ERROR_WANT_READ elif err == SSL_ERROR_WANT_WRITE: errstr = "The operation did not complete (write)" errval = PY_SSL_ERROR_WANT_WRITE elif err == SSL_ERROR_WANT_X509_LOOKUP: errstr = "The operation did not complete (X509 lookup)" errval = PY_SSL_ERROR_WANT_X509_LOOKUP elif err == SSL_ERROR_WANT_CONNECT: errstr = "The operation did not complete (connect)" errval = PY_SSL_ERROR_WANT_CONNECT elif err == SSL_ERROR_SYSCALL: e = libssl_ERR_get_error() if e == 0: if ret == 0 or space.is_w(ss.w_socket, space.w_None): errstr = "EOF occurred in violation of protocol" errval = PY_SSL_ERROR_EOF elif ret == -1: # the underlying BIO reported an I/0 error error = rsocket.last_error() return interp_socket.converted_error(space, error) else: errstr = "Some I/O error occurred" errval = PY_SSL_ERROR_SYSCALL else: errstr = rffi.charp2str(libssl_ERR_error_string(e, None)) errval = PY_SSL_ERROR_SYSCALL elif err == SSL_ERROR_SSL: e = libssl_ERR_get_error() errval = PY_SSL_ERROR_SSL if e != 0: errstr = rffi.charp2str(libssl_ERR_error_string(e, None)) else: errstr = "A failure in the SSL library occurred" else: errstr = "Invalid error code" errval = PY_SSL_ERROR_INVALID_ERROR_CODE return ssl_error(space, errstr, errval)
def getnameinfo(space, w_sockaddr, flags): """getnameinfo(sockaddr, flags) --> (host, port) Get host and port for a sockaddr.""" try: addr = rsocket.ipaddr_from_object(space, w_sockaddr) host, servport = rsocket.getnameinfo(addr, flags) except SocketError, e: raise converted_error(space, e)
def inet_ntoa(space, packed): """inet_ntoa(packed_ip) -> ip_address_string Convert an IP address from 32-bit packed binary format to string format """ try: ip = rsocket.inet_ntoa(packed) except SocketError, e: raise converted_error(space, e)
def getnameinfo(space, w_sockaddr, flags): """getnameinfo(sockaddr, flags) --> (host, port) Get host and port for a sockaddr.""" try: addr = ipaddr_from_object(space, w_sockaddr) host, servport = rsocket.getnameinfo(addr, flags) except SocketError, e: raise converted_error(space, e)
def inet_ntop(space, family, packed): """inet_ntop(family, packed_ip) -> string formatted IP address Convert a packed IP address of the given family to string format. """ try: ip = rsocket.inet_ntop(family, packed) except SocketError, e: raise converted_error(space, e)
def inet_ntoa(space, packed): """inet_ntoa(packed_ip) -> ip_address_string Convert an IP address from 32-bit packed binary format to string format """ try: ip = rsocket.inet_ntoa(packed) except SocketError, e: raise converted_error(space, e)
def inet_ntop(space, family, packed): """inet_ntop(family, packed_ip) -> string formatted IP address Convert a packed IP address of the given family to string format. """ try: ip = rsocket.inet_ntop(family, packed) except SocketError, e: raise converted_error(space, e)
def sethostname(space, w_hostname): """sethostname(hostname) Set the host name. """ hostname = space.text_w(w_hostname) try: res = rsocket.sethostname(hostname) except SocketError as e: raise converted_error(space, e)
def getnameinfo(space, w_sockaddr, flags): """getnameinfo(sockaddr, flags) --> (host, port) Get host and port for a sockaddr.""" try: addr = ipaddr_from_object(space, w_sockaddr) host, servport = rsocket.getnameinfo(addr, flags) except SocketError as e: raise converted_error(space, e) return space.newtuple2(space.newtext(host), space.newtext(servport))
def inet_pton(space, family, ip): """inet_pton(family, ip) -> packed IP address string Convert an IP address from string format to a packed string suitable for use with low-level network functions. """ try: buf = rsocket.inet_pton(family, ip) except SocketError, e: raise converted_error(space, e)
def gethostname(space): """gethostname() -> string Return the current host name. """ try: res = rsocket.gethostname() except SocketError as e: raise converted_error(space, e) return space.fsdecode(space.newbytes(res))
def inet_aton(space, ip): """inet_aton(string) -> packed 32-bit IP representation Convert an IP address in string format (123.45.67.89) to the 32-bit packed binary format used in low-level network functions. """ try: buf = rsocket.inet_aton(ip) except SocketError, e: raise converted_error(space, e)
def getnameinfo(space, w_sockaddr, flags): """getnameinfo(sockaddr, flags) --> (host, port) Get host and port for a sockaddr.""" try: addr = ipaddr_from_object(space, w_sockaddr) host, servport = rsocket.getnameinfo(addr, flags) except SocketError as e: raise converted_error(space, e) return space.newtuple([space.wrap(host), space.wrap(servport)])
def gethostbyaddr(space, host): """gethostbyaddr(host) -> (name, aliaslist, addresslist) Return the true host name, a list of aliases, and a list of IP addresses, for a host. The host argument is a string giving a host name or IP number. """ try: res = rsocket.gethostbyaddr(host) except SocketError, e: raise converted_error(space, e)
def inet_aton(space, ip): """inet_aton(string) -> packed 32-bit IP representation Convert an IP address in string format (123.45.67.89) to the 32-bit packed binary format used in low-level network functions. """ try: buf = rsocket.inet_aton(ip) except SocketError, e: raise converted_error(space, e)
def fromfd(space, fd, family, type, proto=0): """fromfd(fd, family, type[, proto]) -> socket object Create a socket object from the given file descriptor. The remaining arguments are the same as for socket(). """ try: sock = rsocket.fromfd(fd, family, type, proto, W_RSocket) except SocketError, e: raise converted_error(space, e)
def gethostbyname(space, host): """gethostbyname(host) -> address Return the IP address (a string of the form '255.255.255.255') for a host. """ try: addr = rsocket.gethostbyname(host) ip = addr.get_host() except SocketError, e: raise converted_error(space, e)
def fromfd(space, fd, family, type, proto=0): """fromfd(fd, family, type[, proto]) -> socket object Create a socket object from the given file descriptor. The remaining arguments are the same as for socket(). """ try: sock = rsocket.fromfd(fd, family, type, proto, W_RSocket) except SocketError, e: raise converted_error(space, e)
def inet_pton(space, family, ip): """inet_pton(family, ip) -> packed IP address string Convert an IP address from string format to a packed string suitable for use with low-level network functions. """ try: buf = rsocket.inet_pton(family, ip) except SocketError, e: raise converted_error(space, e)
def gethostbyname(space, hostname): """gethostbyname(host) -> address Return the IP address (a string of the form '255.255.255.255') for a host. """ try: addr = rsocket.gethostbyname(hostname) ip = addr.get_host() except SocketError, e: raise converted_error(space, e)
def gethostbyaddr(space, host): """gethostbyaddr(host) -> (name, aliaslist, addresslist) Return the true host name, a list of aliases, and a list of IP addresses, for a host. The host argument is a string giving a host name or IP number. """ try: res = rsocket.gethostbyaddr(host) except SocketError, e: raise converted_error(space, e)
def gethostbyname_ex(space, host): """gethostbyname_ex(host) -> (name, aliaslist, addresslist) Return the true host name, a list of aliases, and a list of IP addresses, for a host. The host argument is a string giving a host name or IP number. """ lock = space.fromcache(State).netdb_lock try: res = rsocket.gethostbyname_ex(host, lock) except SocketError, e: raise converted_error(space, e)
def gethostbyaddr(space, w_host): """gethostbyaddr(host) -> (name, aliaslist, addresslist) Return the true host name, a list of aliases, and a list of IP addresses, for a host. The host argument is a string giving a host name or IP number. """ host = encode_idna(space, w_host) try: res = rsocket.gethostbyaddr(host) except SocketError as e: raise converted_error(space, e) return common_wrapgethost(space, res)
def socketpair(space, family=rsocket.socketpair_default_family, type=rsocket.SOCK_STREAM, proto=0): """socketpair([family[, type[, proto]]]) -> (socket object, socket object) Create a pair of socket objects from the sockets returned by the platform socketpair() function. The arguments are the same as for socket() except the default family is AF_UNIX if defined on the platform; otherwise, the default is AF_INET. """ try: sock1, sock2 = rsocket.socketpair(family, type, proto, W_RSocket) except SocketError, e: raise converted_error(space, e)
def gethostbyname(space, w_host): """gethostbyname(host) -> address Return the IP address (a string of the form '255.255.255.255') for a host. """ host = encode_idna(space, w_host) try: addr = rsocket.gethostbyname(host) ip = addr.get_host() except SocketError as e: raise converted_error(space, e) return space.newtext(ip)
def getaddrinfo(space, w_host, w_port, family=rsocket.AF_UNSPEC, type=0, proto=0, flags=0): """getaddrinfo(host, port [, family, type, proto, flags]) -> list of (family, type, proto, canonname, sockaddr) Resolve host and port into addrinfo struct. """ socktype = type # host can be None, string or unicode if space.is_w(w_host, space.w_None): host = None elif space.isinstance_w(w_host, space.w_bytes): host = space.bytes_w(w_host) elif space.isinstance_w(w_host, space.w_unicode): host = encode_idna(space, w_host) else: raise oefmt(space.w_TypeError, "getaddrinfo() argument 1 must be string or None") # port can be None, int or string if space.is_w(w_port, space.w_None): port = None elif space.isinstance_w(w_port, space.w_int): port = str(space.int_w(w_port)) elif space.isinstance_w(w_port, space.w_bytes): port = space.bytes_w(w_port) elif space.isinstance_w(w_port, space.w_unicode): port = space.bytes_w( space.encode_unicode_object(w_port, 'utf-8', 'strict')) else: raise oefmt(space.w_TypeError, "getaddrinfo() argument 2 must be integer or string") try: lst = rsocket.getaddrinfo(host, port, family, socktype, proto, flags) except SocketError as e: raise converted_error(space, e) lst1 = [ space.newtuple([ space.newint(family), space.newint(socktype), space.newint(protocol), space.newtext(canonname), addr_as_object(addr, INVALID_SOCKET, space) ]) # -1 as per cpython for (family, socktype, protocol, canonname, addr) in lst ] return space.newlist(lst1)
def inet_ntop(space, family, packed): """inet_ntop(family, packed_ip) -> string formatted IP address Convert a packed IP address of the given family to string format. """ try: ip = rsocket.inet_ntop(family, packed) except SocketError as e: raise converted_error(space, e) except ValueError: raise oefmt(space.w_ValueError, "invalid length of packed IP address string") return space.wrap(ip)
def inet_ntop(space, family, packed): """inet_ntop(family, packed_ip) -> string formatted IP address Convert a packed IP address of the given family to string format. """ try: ip = rsocket.inet_ntop(family, packed) except SocketError as e: raise converted_error(space, e) except ValueError: raise oefmt(space.w_ValueError, "invalid length of packed IP address string") return space.newtext(ip)
def socketpair(space, family=rsocket.socketpair_default_family, type =rsocket.SOCK_STREAM, proto =0): """socketpair([family[, type[, proto]]]) -> (socket object, socket object) Create a pair of socket objects from the sockets returned by the platform socketpair() function. The arguments are the same as for socket() except the default family is AF_UNIX if defined on the platform; otherwise, the default is AF_INET. """ try: sock1, sock2 = rsocket.socketpair(family, type, proto) except SocketError, e: raise converted_error(space, e)
def gethostname(space): """gethostname() -> string Return the current host name. """ try: GIL = space.threadlocals.getGIL() if GIL is not None: GIL.release() try: res = rsocket.gethostname() finally: if GIL is not None: GIL.acquire(True) except SocketError, e: raise converted_error(space, e)
def getprotobyname(space, name): """getprotobyname(name) -> integer Return the protocol number for the named protocol. (Rarely used.) """ try: GIL = space.threadlocals.getGIL() if GIL is not None: GIL.release() try: proto = rsocket.getprotobyname(name) finally: if GIL is not None: GIL.acquire(True) except SocketError, e: raise converted_error(space, e)
def getservbyname(space, name, w_proto): """getservbyname(servicename[, protocolname]) -> integer Return a port number from a service name and protocol name. The optional protocol name, if given, should be 'tcp' or 'udp', otherwise any protocol will match. """ if space.is_w(w_proto, space.w_None): proto = None else: proto = space.str_w(w_proto) try: port = rsocket.getservbyname(name, proto) except SocketError, e: raise converted_error(space, e)
def gethostbyname(space, hostname): """gethostbyname(host) -> address Return the IP address (a string of the form '255.255.255.255') for a host. """ try: GIL = space.threadlocals.getGIL() if GIL is not None: GIL.release() try: addr = rsocket.gethostbyname(hostname) finally: if GIL is not None: GIL.acquire(True) ip = addr.get_host() except SocketError, e: raise converted_error(space, e)
def getnameinfo(space, w_sockaddr, flags): """getnameinfo(sockaddr, flags) --> (host, port) Get host and port for a sockaddr.""" try: GIL = space.threadlocals.getGIL() if GIL is not None: GIL.release() try: addr = rsocket.ipaddr_from_object(space, w_sockaddr) host, servport = rsocket.getnameinfo(addr, flags) finally: if GIL is not None: GIL.acquire(True) except SocketError, e: raise converted_error(space, e)
def getservbyport(space, port, w_proto=None): """getservbyport(port[, protocolname]) -> string Return the service name from a port number and protocol name. The optional protocol name, if given, should be 'tcp' or 'udp', otherwise any protocol will match. """ if space.is_w(w_proto, space.w_None): proto = None else: proto = space.str_w(w_proto) try: service = rsocket.getservbyport(port, proto) except SocketError, e: raise converted_error(space, e)
def getservbyport(space, port, w_proto=None): """getservbyport(port[, protocolname]) -> string Return the service name from a port number and protocol name. The optional protocol name, if given, should be 'tcp' or 'udp', otherwise any protocol will match. """ if space.is_w(w_proto, space.w_None): proto = None else: proto = space.str_w(w_proto) try: service = rsocket.getservbyport(port, proto) except SocketError, e: raise converted_error(space, e)
def gethostbyaddr(space, host): """gethostbyaddr(host) -> (name, aliaslist, addresslist) Return the true host name, a list of aliases, and a list of IP addresses, for a host. The host argument is a string giving a host name or IP number. """ try: GIL = space.threadlocals.getGIL() if GIL is not None: GIL.release() try: res = rsocket.gethostbyaddr(host) finally: if GIL is not None: GIL.acquire(True) except SocketError, e: raise converted_error(space, e)
def getservbyname(space, name, w_proto=None): """getservbyname(servicename[, protocolname]) -> integer Return a port number from a service name and protocol name. The optional protocol name, if given, should be 'tcp' or 'udp', otherwise any protocol will match. """ if space.is_w(w_proto, space.w_None): proto = None else: proto = space.str_w(w_proto) try: port = rsocket.getservbyname(name, proto) except SocketError, e: raise converted_error(space, e)
def sethostname(space, w_hostname): """sethostname(hostname) Set the host name. """ if space.isinstance_w(w_hostname, space.w_bytes): hostname = space.bytes_w(w_hostname) elif space.isinstance_w(w_hostname, space.w_unicode): hostname = space.fsencode_w(w_hostname) else: raise oefmt(space.w_TypeError, "sethostname() argument 1 must be str or bytes") try: res = rsocket.sethostname(hostname) except SocketError as e: raise converted_error(space, e)
def getnameinfo(space, w_sockaddr, flags): """getnameinfo(sockaddr, flags) --> (host, port) Get host and port for a sockaddr.""" try: host = space.str_w((space.getitem(w_sockaddr, space.wrap(0)))) port = str(space.int_w(space.getitem(w_sockaddr, space.wrap(1)))) lst = rsocket.getaddrinfo(host, port, rsocket.AF_UNSPEC, rsocket.SOCK_DGRAM, 0, rsocket.AI_NUMERICHOST) if len(lst) > 1: raise OperationError( get_error(space, 'error'), space.wrap("sockaddr resolved to multiple addresses")) addr = lst[0][4] fill_from_object(addr, space, w_sockaddr) host, servport = rsocket.getnameinfo(addr, flags) except SocketError, e: raise converted_error(space, e)
def getnameinfo(space, w_sockaddr, flags): """getnameinfo(sockaddr, flags) --> (host, port) Get host and port for a sockaddr.""" try: host = space.text_w((space.getitem(w_sockaddr, space.newint(0)))) port = str(space.int_w(space.getitem(w_sockaddr, space.newint(1)))) lst = rsocket.getaddrinfo(host, port, rsocket.AF_UNSPEC, rsocket.SOCK_DGRAM, 0, rsocket.AI_NUMERICHOST) if len(lst) > 1: raise oefmt(get_error(space, 'error'), "sockaddr resolved to multiple addresses") addr = lst[0][4] fill_from_object(addr, space, w_sockaddr) host, servport = rsocket.getnameinfo(addr, flags) except SocketError as e: raise converted_error(space, e) return space.newtuple([space.newtext(host), space.newtext(servport)])
def getnameinfo(space, w_sockaddr, flags): """getnameinfo(sockaddr, flags) --> (host, port) Get host and port for a sockaddr.""" try: host = space.str_w((space.getitem(w_sockaddr, space.wrap(0)))) port = str(space.int_w(space.getitem(w_sockaddr, space.wrap(1)))) lst = rsocket.getaddrinfo(host, port, rsocket.AF_UNSPEC, rsocket.SOCK_DGRAM, 0, rsocket.AI_NUMERICHOST) if len(lst) > 1: raise OperationError( get_error(space, 'error'), space.wrap("sockaddr resolved to multiple addresses")) addr = lst[0][4] fill_from_object(addr, space, w_sockaddr) host, servport = rsocket.getnameinfo(addr, flags) except SocketError, e: raise converted_error(space, e)
def getaddrinfo(space, w_host, w_port, family=rsocket.AF_UNSPEC, type=0, proto=0, flags=0): """getaddrinfo(host, port [, family, type, proto, flags]) -> list of (family, type, proto, canonname, sockaddr) Resolve host and port into addrinfo struct. """ socktype = type # host can be None, string or unicode if space.is_w(w_host, space.w_None): host = None elif space.isinstance_w(w_host, space.w_bytes): host = space.bytes_w(w_host) elif space.isinstance_w(w_host, space.w_unicode): w_shost = space.call_method(w_host, "encode", space.wrap("idna")) host = space.bytes_w(w_shost) else: raise OperationError( space.w_TypeError, space.wrap("getaddrinfo() argument 1 must be string or None")) # port can be None, int or string if space.is_w(w_port, space.w_None): port = None elif space.isinstance_w(w_port, space.w_int): port = str(space.int_w(w_port)) elif space.isinstance_w(w_port, space.w_bytes): port = space.bytes_w(w_port) elif space.isinstance_w(w_port, space.w_unicode): port = space.str_w(w_port) else: raise OperationError( space.w_TypeError, space.wrap("getaddrinfo() argument 2 must be integer or string")) try: lst = rsocket.getaddrinfo(host, port, family, socktype, proto, flags) except SocketError, e: raise converted_error(space, e)
def getservbyport(space, port, w_proto): """getservbyport(port[, protocolname]) -> string Return the service name from a port number and protocol name. The optional protocol name, if given, should be 'tcp' or 'udp', otherwise any protocol will match. """ if space.is_w(w_proto, space.w_None): proto = None else: proto = space.str_w(w_proto) if port < 0 or port > 0xffff: raise oefmt(space.w_ValueError, "getservbyport: port must be 0-65535.") try: service = rsocket.getservbyport(port, proto) except SocketError as e: raise converted_error(space, e) return space.wrap(service)
def getservbyname(space, name, w_proto=None): """getservbyname(servicename[, protocolname]) -> integer Return a port number from a service name and protocol name. The optional protocol name, if given, should be 'tcp' or 'udp', otherwise any protocol will match. """ if space.is_w(w_proto, space.w_None): proto = None else: proto = space.str_w(w_proto) try: GIL = space.threadlocals.getGIL() if GIL is not None: GIL.release() try: port = rsocket.getservbyname(name, proto) finally: if GIL is not None: GIL.acquire(True) except SocketError, e: raise converted_error(space, e)
def getaddrinfo(space, w_host, w_port, family=rsocket.AF_UNSPEC, socktype=0, proto=0, flags=0): """getaddrinfo(host, port [, family, socktype, proto, flags]) -> list of (family, socktype, proto, canonname, sockaddr) Resolve host and port into addrinfo struct. """ # host can be None, string or unicode if space.is_w(w_host, space.w_None): host = None elif space.isinstance_w(w_host, space.w_str): host = space.bytes_w(w_host) elif space.isinstance_w(w_host, space.w_unicode): w_shost = space.call_method(w_host, "encode", space.wrap("idna")) host = space.bytes_w(w_shost) else: raise oefmt(space.w_TypeError, "getaddrinfo() argument 1 must be string or None") # port can be None, int or string if space.is_w(w_port, space.w_None): port = None elif space.isinstance_w(w_port, space.w_int) or space.isinstance_w(w_port, space.w_long): port = str(space.int_w(w_port)) elif space.isinstance_w(w_port, space.w_str): port = space.bytes_w(w_port) else: raise oefmt(space.w_TypeError, "getaddrinfo() argument 2 must be integer or string") try: lst = rsocket.getaddrinfo(host, port, family, socktype, proto, flags) except SocketError as e: raise converted_error(space, e) lst1 = [space.newtuple([space.wrap(family), space.wrap(socktype), space.wrap(protocol), space.wrap(canonname), addr_as_object(addr, INVALID_SOCKET, space)]) # -1 as per cpython for (family, socktype, protocol, canonname, addr) in lst] return space.newlist(lst1)
def getservbyport(space, port, w_proto): """getservbyport(port[, protocolname]) -> string Return the service name from a port number and protocol name. The optional protocol name, if given, should be 'tcp' or 'udp', otherwise any protocol will match. """ if space.is_w(w_proto, space.w_None): proto = None else: proto = space.text_w(w_proto) if port < 0 or port > 0xffff: raise oefmt(space.w_OverflowError, "getservbyport: port must be 0-65535.") try: service = rsocket.getservbyport(port, proto) except SocketError as e: raise converted_error(space, e) return space.newtext(service)
def dup(space, fd): try: newfd = rsocket.dup(fd, inheritable=False) except SocketError as e: raise converted_error(space, e) return space.newint(newfd)