qmsk/net/socket/_address.pxd
changeset 49 e2f79e68418a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qmsk/net/socket/_address.pxd	Fri Sep 25 21:34:04 2009 +0300
@@ -0,0 +1,42 @@
+"""
+    Internal module to keep the abstract sockaddr types out of the address module, which must contain backreferences to
+    the concrete implementations.
+"""
+
+cimport qmsk.net.socket.platform as platform
+
+cdef class sockaddr :
+    """
+        A network-level socket address
+        
+        XXX: not abstract enough. Functions/properties like getnameinfo/addr/port do not work for e.g. sockaddr_un
+
+        >>> sockaddr().family
+        0
+        >>> sockaddr().port
+        Traceback (most recent call last):
+          ...
+        NotImplementedError
+        >>> sockaddr().getnameinfo()
+        Traceback (most recent call last):
+          ...
+        NotImplementedError
+    """
+    
+    # address family
+    # XXX: this should be a class constant! It's part of our type safety!
+    cdef readonly platform.sa_family_t family
+
+    cdef void _init_family (self, platform.sa_family_t family = ?)
+
+    # get the sockaddr/socklen
+    # each of these can be NULL to ignore it
+    cdef int _get_sockaddr (self, platform.sockaddr **sa_ptr, platform.socklen_t *sa_len) except -1
+
+    cdef platform.sockaddr* _get_sockaddr_ptr (self) except NULL
+    cdef platform.socklen_t _get_sockaddr_len (self) except -1
+    
+    # set the sockaddr, socklen must match
+    cdef int _set_sockaddr (self, platform.sockaddr *sa, size_t sa_len) except -1
+
+