--- /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
+
+