libc.pyx
changeset 0 975801b28d85
child 4 664a1dfe08ac
equal deleted inserted replaced
-1:000000000000 0:975801b28d85
       
     1 from libc cimport *
       
     2 
       
     3 cdef object inet_ntop (int af, void *sockaddr) :
       
     4     """
       
     5         Wrapper around inet_ntop, returning a PyString
       
     6     """
       
     7 
       
     8     # XXX: longest possible address...
       
     9     cdef char buf[INET6_ADDRSTRLEN]
       
    10 
       
    11     if c_inet_ntop(af, sockaddr, buf, sizeof(buf)) == NULL :
       
    12         # XXX: errno?
       
    13         raise OSError()
       
    14     
       
    15     # autoconvert -> str
       
    16     return buf
       
    17 
       
    18 cdef object inet_pton (int af, char *addr, void *sockaddr_out) :
       
    19     if c_inet_pton(af, addr, sockaddr_out) < 0 :
       
    20         raise OSError()
       
    21 
       
    22 cdef object getnameinfo (sockaddr *sa, socklen_t salen, int flags) :
       
    23     cdef char hostbuf[NI_MAXHOST]
       
    24     cdef char servbuf[NI_MAXSERV]
       
    25     cdef int err
       
    26 
       
    27     err = c_getnameinfo(sa, salen, hostbuf, sizeof(hostbuf), servbuf, sizeof(servbuf), flags)
       
    28 
       
    29     if err :
       
    30         # XXX: raise a GAIError
       
    31         raise Exception(gai_strerror(err))
       
    32 
       
    33     else :
       
    34         return hostbuf, servbuf
       
    35