--- a/qmsk/net/socket/address.pyx Tue Sep 01 00:08:02 2009 +0300
+++ b/qmsk/net/socket/address.pyx Fri Sep 25 21:34:04 2009 +0300
@@ -1,104 +1,13 @@
cimport qmsk.net.libc as libc
cimport qmsk.net.py as py
-from qmsk.net.socket.address cimport *
+#from qmsk.net.socket.address cimport *
+
+cimport qmsk.net.libc as libc
cimport qmsk.net.socket.platform as platform
-cdef class sockaddr :
- cdef void _init_family (self, platform.sa_family_t family=platform.AF_UNSPEC) :
- self.family = family
-
- # XXX:use size_t
- cdef int _get_sockaddr (self, platform.sockaddr **sa_ptr, platform.socklen_t *sa_len) except -1 :
- """
- Get the sockaddr pointer and sockaddr length for this address
- """
-
- raise NotImplementedError()
-
- cdef platform.sockaddr* _get_sockaddr_ptr (self) except NULL :
- """
- Get the sockaddr pointer
- """
-
- cdef platform.sockaddr *sa
- cdef platform.socklen_t sa_len
-
- self._get_sockaddr(&sa, &sa_len)
-
- return sa
-
- cdef platform.socklen_t _get_sockaddr_len (self) except -1 :
- """
- Get the sockaddr len
- """
-
- cdef platform.sockaddr *sa
- cdef platform.socklen_t sa_len
-
- self._get_sockaddr(&sa, &sa_len)
-
- return sa_len
-
- cdef int _set_sockaddr (self, platform.sockaddr *sa, size_t sa_len) except -1 :
- """
- Set the sockaddr value for this address; sa_len must match!
- """
-
- raise NotImplementedError()
-
- def getnameinfo (self) :
- """
- Returns a (host, serv) tuple for this address à la getnameinfo
-
- >>> addr = sockaddr_in()
- >>> assert addr.getnameinfo() == (addr.addr, str(addr.port))
- """
-
- cdef platform.sockaddr *sa
- cdef platform.socklen_t sa_len
-
- # XXX: take as args?
- cdef int flags = platform.NI_NUMERICHOST | platform.NI_NUMERICSERV
-
- # get our abstract sockaddr
- self._get_sockaddr(&sa, &sa_len)
-
- # get nice text format
- return platform.getnameinfo(sa, sa_len, flags)
-
- property addr :
- """
- The ASCII literal network address
- """
-
- def __get__ (self) :
- """
- Default implmentation using getnameinfo()
- """
-
- addr, port = self.getnameinfo()
-
- return addr
-
- property port :
- """
- The integer port number
- """
-
- def __get__ (self) :
- """
- Default implementation using getnameinfo() and int()
- """
-
- addr, port = self.getnameinfo()
-
- return int(port)
-
- def __repr__ (self) :
- return "sockaddr(%d, %s, %d)" % (self.family, self.addr, self.port)
-
+# concrete sockaddr implementation types
# mapping of AF -> sockaddr, user-modifyable
cimport qmsk.net.socket.af_inet, qmsk.net.socket.af_inet6
@@ -226,7 +135,7 @@
Look up given hostname/service using the given socket parameters, and return a sequence of addrinfo objects.
hostname - internet address/hostname to look up, or None (for INADDR_ANY/localhost, see AI_PASSIVE)
- service - port/service to use, or None (for ephemeral)
+ service - port/service to use, or None (for ephemeral). Should be given as a string
family - address family to use, one of AF_*. May be AF_UNSPEC.
socktype - socket type to use, one of SOCK_*.
protocol - protocol to use, one of IPPROTO_* or zero to pick the default protocol for the given
@@ -267,6 +176,10 @@
_hostname = hostname
if service is not None :
+ # XXX: also accept integer port number?
+ if isinstance(service, int) :
+ service = str(service)
+
_service = service
# operate!