|
1 from libc cimport * |
|
2 from py cimport raise_errno |
|
3 |
|
4 cdef object inet_ntop (int af, void *sockaddr) : |
|
5 """ |
|
6 Wrapper around inet_ntop, returning a PyString |
|
7 """ |
|
8 |
|
9 # XXX: longest possible address... |
|
10 cdef char buf[INET6_ADDRSTRLEN] |
|
11 |
|
12 if c_inet_ntop(af, sockaddr, buf, sizeof(buf)) == NULL : |
|
13 raise_errno('inet_ntop') |
|
14 |
|
15 # autoconvert -> str |
|
16 return buf |
|
17 |
|
18 cdef object inet_pton (int af, char *addr, void *sockaddr_out) : |
|
19 cdef int ret |
|
20 |
|
21 ret = c_inet_pton(af, addr, sockaddr_out) |
|
22 |
|
23 if ret < 0 : |
|
24 raise_errno('inet_pton') |
|
25 |
|
26 elif ret == 0 : |
|
27 raise NameError("Invalid network address for specified address family: %r" % (addr, )) |
|
28 |
|
29 cdef object getnameinfo (sockaddr *sa, socklen_t salen, int flags) : |
|
30 cdef char hostbuf[NI_MAXHOST] |
|
31 cdef char servbuf[NI_MAXSERV] |
|
32 cdef int err |
|
33 |
|
34 err = c_getnameinfo(sa, salen, hostbuf, sizeof(hostbuf), servbuf, sizeof(servbuf), flags) |
|
35 |
|
36 if err : |
|
37 # XXX: raise a GAIError |
|
38 raise Exception(gai_strerror(err)) |
|
39 # raise GAIError('getnameinfo', err) |
|
40 |
|
41 else : |
|
42 return hostbuf, servbuf |
|
43 |
|
44 #cdef class Errno (py.OSError) : |
|
45 # def __init__ (self, func) : |
|
46 # self.func = func |
|
47 # self.err = errno |
|
48 # self.strerror = strerror(errno) |
|
49 # |
|
50 # def __str__ (self) : |
|
51 # return "%s: %s" % (self.func, self.strerror) |
|
52 # |
|
53 #cdef class GAIError (py.OSError) : |
|
54 # def __init__ (self, func, err) : |
|
55 # self.func = func |
|
56 # self.err = err |
|
57 # self.strerror = gai_strerror(err) |
|
58 # |
|
59 # def __str__ (self) : |
|
60 # return "%s: %s" % (self.func, self.strerror) |
|
61 # |