[pypy-svn] r18546 - in pypy/dist/pypy/module/_socket: . test

afa at codespeak.net afa at codespeak.net
Fri Oct 14 16:12:48 CEST 2005


Author: afa
Date: Fri Oct 14 16:12:46 2005
New Revision: 18546

Modified:
   pypy/dist/pypy/module/_socket/interp_socket.py
   pypy/dist/pypy/module/_socket/test/test_socket2.py
Log:
(valentino, afa): more functions on socket
need to test socket.fromfd


Modified: pypy/dist/pypy/module/_socket/interp_socket.py
==============================================================================
--- pypy/dist/pypy/module/_socket/interp_socket.py	(original)
+++ pypy/dist/pypy/module/_socket/interp_socket.py	Fri Oct 14 16:12:46 2005
@@ -37,7 +37,7 @@
     return space.wrap(socket.gethostbyaddr(ip_num))
 gethostbyaddr.unwrap_spec = [ObjSpace, str]
 
-def getservbyname(space, name, w_proto = NoneNotWrapped):
+def getservbyname(space, name, w_proto=NoneNotWrapped):
     """getservbyname(servicename[, protocolname]) -> integer
 
     Return a port number from a service name and protocol name.
@@ -50,12 +50,40 @@
         return space.wrap(socket.getservbyname(name, space.str_w(w_proto)))
 getservbyname.unwrap_spec = [ObjSpace, str, W_Root]
 
-def getservbyport(space, port):
+def getservbyport(space, port, w_proto=NoneNotWrapped):
     """getservbyport(port[, protocolname]) -> string
 
     Return the service name from a port number and protocol name.
     The optional protocol name, if given, should be 'tcp' or 'udp',
     otherwise any protocol will match.
     """
+    if w_proto is None:
+        return space.wrap(socket.getservbyport(port))
+    else:
+        return space.wrap(socket.getservbyport(port, space.str_w(w_proto)))
+getservbyport.unwrap_spec = [ObjSpace, int, W_Root]
+
+def getprotobyname(space, name):
+    """getprotobyname(name) -> integer
+
+    Return the protocol number for the named protocol.  (Rarely used.)
+    """
+    return space.wrap(socket.getprotobyname(name))
+getprotobyname.unwrap_spec = [ObjSpace, str]
+
+def fromfd(space, fd, family, type, w_proto=NoneNotWrapped):
+    """fromfd(fd, family, type[, proto]) -> socket object
+
+    Create a socket object from the given file descriptor.
+    The remaining arguments are the same as for socket().
+    """
+    if proto is None:
+        return space.wrap(socket.fromfd(fd, family, type))
+    else:
+        return space.wrap(socket.fromfd(fd, family, type, space.int_w(proto)))
+fromfd.unwrap_spec = [ObjSpace, int, int, int, int]
 
-# getservbyport getprotobyname
+#    fromfd socketpair
+#    ntohs ntohl htons htonl inet_aton inet_ntoa inet_pton inet_ntop
+#    getaddrinfo getnameinfo
+#    getdefaulttimeout setdefaulttimeout

Modified: pypy/dist/pypy/module/_socket/test/test_socket2.py
==============================================================================
--- pypy/dist/pypy/module/_socket/test/test_socket2.py	(original)
+++ pypy/dist/pypy/module/_socket/test/test_socket2.py	Fri Oct 14 16:12:46 2005
@@ -39,11 +39,41 @@
     # 2 args version
     port = space.appexec([w_socket, space.wrap(name)],
                         "(_socket, name): return _socket.getservbyname(name, 'tcp')")
+    assert space.unwrap(port) == 25
     # 1 arg version
     if sys.version_info < (2, 4):
         py.test.skip("getservbyname second argument is not optional before python 2.4")
     port = space.appexec([w_socket, space.wrap(name)],
                         "(_socket, name): return _socket.getservbyname(name)")
+    assert space.unwrap(port) == 25
+
+def test_getservbyport():
+    if sys.version_info < (2, 4):
+        py.test.skip("getservbyport does not exist before python 2.4")
+    port = 25
+    # 2 args version
+    name = space.appexec([w_socket, space.wrap(port)],
+                         "(_socket, port): return _socket.getservbyport(port, 'tcp')")
+    assert space.unwrap(name) == "smtp"
+    name = space.appexec([w_socket, space.wrap(port)],
+                         """(_socket, port):
+                         try:
+                             return _socket.getservbyport(port, 42)
+                         except TypeError:
+                             return 'OK'
+                         """)
+    assert space.unwrap(name) == 'OK' 
+    # 1 arg version
+    name = space.appexec([w_socket, space.wrap(port)],
+                         "(_socket, port): return _socket.getservbyport(port)")
+    assert space.unwrap(name) == "smtp"
+
+def test_getprotobyname():
+    name = "tcp"
+    num = space.appexec([w_socket, space.wrap(name)],
+                        "(_socket, name): return _socket.getprotobyname(name)")
+    assert space.unwrap(num) == socket.IPPROTO_TCP
+    
 
 def test_has_ipv6():
     res = space.appexec([w_socket], "(_socket): return _socket.has_ipv6")



More information about the Pypy-commit mailing list