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