0
|
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 |
|