# HG changeset patch # User Tero Marttila # Date 1250460220 -10800 # Node ID 43a57943af9fa93c30b7bbd5079cbdee469b53d1 # Parent 5f4077a530b040191ba662d1e61ed7b90cfcb29a getsockname/getpeername diff -r 5f4077a530b0 -r 43a57943af9f 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( &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, &ss, &ss_len) : + raise_errno('getsockname') + + # build the new sockaddr + return build_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, &ss, &ss_len) : + raise_errno('getpeername') + + # build the new sockaddr + return build_sockaddr( &ss, ss_len) def send (self, object buf, int flags = 0) : """