getsockname/getpeername
authorTero Marttila <terom@fixme.fi>
Mon, 17 Aug 2009 01:03:40 +0300
changeset 18 43a57943af9f
parent 17 5f4077a530b0
child 19 e6b670dbfe3b
getsockname/getpeername
qmsk/net/socket/socket.pyx
--- a/qmsk/net/socket/socket.pyx	Mon Aug 17 00:55:25 2009 +0300
+++ b/qmsk/net/socket/socket.pyx	Mon Aug 17 01:03:40 2009 +0300
@@ -203,6 +203,42 @@
         cdef sockaddr src_addr = build_sockaddr(<platform.sockaddr *> &ss, ss_len)
 
         return sock_obj, src_addr
+    
+    def getsockname (self) :
+        """
+            Get the local address this socket is currently bound to. This can be set using bind(), or automatically.
+
+            Returns a sockaddr object.
+        """
+
+        # prep the sockaddr that we will return
+        cdef platform.sockaddr_storage ss
+        cdef platform.socklen_t ss_len = sizeof(ss)
+
+        # getsockname()
+        if platform.getsockname(self.fd, <platform.sockaddr *> &ss, &ss_len) :
+            raise_errno('getsockname')
+        
+        # build the new sockaddr
+        return build_sockaddr(<platform.sockaddr *> &ss, ss_len)
+
+    def getpeername (self) :
+        """
+            Get the remote address this socket is currently connected to.
+
+            Returns a sockaddr object.
+        """
+
+        # prep the sockaddr that we will return
+        cdef platform.sockaddr_storage ss
+        cdef platform.socklen_t ss_len = sizeof(ss)
+
+        # getpeername()
+        if platform.getpeername(self.fd, <platform.sockaddr *> &ss, &ss_len) :
+            raise_errno('getpeername')
+        
+        # build the new sockaddr
+        return build_sockaddr(<platform.sockaddr *> &ss, ss_len)
 
     def send (self, object buf, int flags = 0) :
         """