from qmsk.net.socket.platform cimport *
from py cimport raise_errno
## function wrappers
cdef object inet_ntop (int af, void *sockaddr) :
"""
Wrapper around inet_ntop, returning a PyString
"""
# XXX: longest possible address...
cdef char buf[INET6_ADDRSTRLEN]
if c_inet_ntop(af, sockaddr, buf, sizeof(buf)) == NULL :
raise_errno('inet_ntop')
# autoconvert -> str
return buf
cdef object inet_pton (int af, char *addr, void *sockaddr_out) :
cdef int ret
ret = c_inet_pton(af, addr, sockaddr_out)
if ret < 0 :
raise_errno('inet_pton')
elif ret == 0 :
raise NameError("Invalid network address for specified address family: %r" % (addr, ))
cdef object getnameinfo (sockaddr *sa, socklen_t salen, int flags) :
cdef char hostbuf[NI_MAXHOST]
cdef char servbuf[NI_MAXSERV]
cdef int err
err = c_getnameinfo(sa, salen, hostbuf, sizeof(hostbuf), servbuf, sizeof(servbuf), flags)
if err :
# XXX: raise a GAIError
raise Exception(gai_strerror(err))
# raise GAIError('getnameinfo', err)
else :
return hostbuf, servbuf