--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/qmsk/net/libc.pyx Sun Aug 16 19:01:21 2009 +0300
@@ -0,0 +1,61 @@
+from libc cimport *
+from py cimport raise_errno
+
+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
+
+#cdef class Errno (py.OSError) :
+# def __init__ (self, func) :
+# self.func = func
+# self.err = errno
+# self.strerror = strerror(errno)
+#
+# def __str__ (self) :
+# return "%s: %s" % (self.func, self.strerror)
+#
+#cdef class GAIError (py.OSError) :
+# def __init__ (self, func, err) :
+# self.func = func
+# self.err = err
+# self.strerror = gai_strerror(err)
+#
+# def __str__ (self) :
+# return "%s: %s" % (self.func, self.strerror)
+#