[pypy-svn] r26520 - in pypy/dist/pypy: module/_socket rpython/rctypes/socketmodule
ac at codespeak.net
ac at codespeak.net
Fri Apr 28 12:51:42 CEST 2006
Author: ac
Date: Fri Apr 28 12:51:41 2006
New Revision: 26520
Modified:
pypy/dist/pypy/module/_socket/interp_socket.py
pypy/dist/pypy/rpython/rctypes/socketmodule/ctypes_socket.py
Log:
(aleale, arre)
Now _socket annotates (but does not specialize!)
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 Apr 28 12:51:41 2006
@@ -182,16 +182,21 @@
if not hostent:
raise w_get_socketherror(space, None, _c.h_errno.value)
aliases = []
- for alias in hostent.contents.h_aliases:
- if alias is None:
- break
+ i = 0
+ h_aliases = hostent.contents.h_aliases
+ alias = h_aliases[0]
+ while alias is not None:
aliases.append(space.wrap(alias))
+ i += 1
+ alias = h_aliases[i]
address_list = []
h_addr_list = ctypes.cast(hostent.contents.h_addr_list, ctypes.POINTER(ctypes.POINTER(_c.in_addr)))
- for addr in h_addr_list:
- if not addr:
- break
+ i = 0
+ addr = h_addr_list[0]
+ while addr is not None:
address_list.append(space.wrap(_c.inet_ntoa(addr.contents)))
+ i += 1
+ addr = h_addr_list[i]
return space.newtuple([space.wrap(hostent.contents.h_name),
space.newlist(aliases), space.newlist(address_list)])
@@ -290,7 +295,7 @@
sock_type = space.int_w(w_sock_type)
if w_proto is not None:
proto = space.int_w(w_proto)
- result = ctypes.ARRAY(ctypes.c_int, 2)
+ result = _c.socketpair_t()
error = _c.socketpair(family, sock_type, proto, result)
if error < 0:
raise w_get_socketerror(space, None, _c.errno.value)
@@ -673,7 +678,7 @@
if res:
_c.freeaddrinfo(res)
if error:
- raise w_get_socketgaierror(None, error)
+ raise w_get_socketgaierror(space, None, error)
return space.newtuple([space.wrap(hostbuf.value),
space.wrap(portbuf.value)])
getnameinfo.unwrap_spec = [ObjSpace, W_Root, int]
@@ -775,11 +780,11 @@
if retval != 0:
raise w_get_socketgaierror(space, None, retval)
addrinfo = res.contents
- addrlen = addrinfo.ai_addrlen
- caddr_ptr = ctypes.create_string_buffer(addrlen)
- _c.memcpy(caddr_ptr, addrinfo.ai_addr, addrlen)
+ addrlen = addrinfo.ai_addrlen
+ caddr_buf = ctypes.create_string_buffer(int(addrlen)) # XXX forcing a long to an int
+ _c.memcpy(caddr_buf, addrinfo.ai_addr, addrlen)
- sockaddr_ptr = ctypes.cast(caddr_ptr, _c.sockaddr_ptr)
+ sockaddr_ptr = ctypes.cast(caddr_buf, _c.sockaddr_ptr)
return sockaddr_ptr, addrlen
else:
@@ -794,10 +799,10 @@
"""
peeraddr = _c.pointer(_c.sockaddr())
peeraddrlen = _c.socklen_t(_c.sockaddr_size)
- newfd = _c.socketaccept(self._fd, peeraddr,
+ newfd = _c.socketaccept(self.fd, peeraddr,
_c.pointer(peeraddrlen))
if newfd < 0:
- raise w_get_socketerror(_c.errno.value)
+ raise w_get_socketerror(space, None, _c.errno.value)
newsocket = Socket(space, newfd, self.family, self.type, self.proto)
return space.newtuple([newsocket, w_makesockaddr(space, peeraddr, peeraddrlen.value, self.proto)])
accept.unwrap_spec = ['self', ObjSpace]
@@ -810,7 +815,7 @@
sockets the address is a tuple (ifname, proto [,pkttype [,hatype]])
"""
caddr_ptr, caddr_len = self._getsockaddr(space, w_addr)
- res = _c.socketbind(self._fd, caddr_ptr, caddr_len)
+ res = _c.socketbind(self.fd, caddr_ptr, caddr_len)
if res < 0:
raise w_get_socketerror(space, None, _c.errno.value)
bind.unwrap_spec = ['self', ObjSpace, W_Root]
@@ -834,12 +839,12 @@
Connect the socket to a remote address. For IP sockets, the address
is a pair (host, port).
"""
- errno = self.connect_ex(space, w_addr)
+ errno = self._connect_ex(space, w_addr)
if errno:
raise w_get_socketerror(space, None, errno)
connect.unwrap_spec = ['self', ObjSpace, W_Root]
- def connect_ex(self, space, w_addr):
+ def _connect_ex(self, space, w_addr):
"""connect_ex(address) -> errno
This is like connect(address), but returns an error code (the errno value)
@@ -854,6 +859,9 @@
pass
return errno
return 0
+
+ def connect_ex(self, space, w_addr):
+ return space.wrap(self._connect_ex(space, w_addr))
connect_ex.unwrap_spec = ['self', ObjSpace, W_Root]
def dup(self, space):
@@ -921,7 +929,7 @@
c_buffersize = _c.c_int(space.int_w(w_buffersize))
buffer = ctypes.create_string_buffer(c_buffersize.value)
err = _c.socketgetsockopt(self.fd, level, option, buffer,
- ctypes.POINTER(c_buffersize))
+ ctypes.pointer(c_buffersize))
if err:
raise w_get_socketerror(space, None, _c.errno.value)
return space.wrap(buffer[:c_buffersize.value])
@@ -1038,10 +1046,7 @@
setblocking(True) is equivalent to settimeout(None);
setblocking(False) is equivalent to settimeout(0.0).
"""
- if flag:
- self.settimeout(space, None)
- else:
- self.settimeout(space, 0.0)
+ setblocking(self.fd, bool(flag))
setblocking.unwrap_spec = ['self', ObjSpace, int]
def setsockopt(self, space, level, option, w_value):
@@ -1089,7 +1094,7 @@
raise OperationError(space.w_ValueError,
space.wrap("Timeout value out of range"))
self.timeout = timeout
- self.setblocking(space, timeout < 0.0)
+ setblocking(self.fd, timeout < 0.0)
settimeout.unwrap_spec = ['self', ObjSpace, W_Root]
def shutdown(self, space, how):
Modified: pypy/dist/pypy/rpython/rctypes/socketmodule/ctypes_socket.py
==============================================================================
--- pypy/dist/pypy/rpython/rctypes/socketmodule/ctypes_socket.py (original)
+++ pypy/dist/pypy/rpython/rctypes/socketmodule/ctypes_socket.py Fri Apr 28 12:51:41 2006
@@ -350,6 +350,7 @@
memcpy.argtypes = [c_void_p, c_void_p, size_t]
memcpy.restype = c_void_p
+socketpair_t = ARRAY(c_int, 2)
socketpair = socketdll.socketpair
socketpair.argtypes = [c_int, c_int, c_int, POINTER(c_int)]
socketpair.restype = c_int
More information about the Pypy-commit
mailing list