Ah, the main change to this code since 1.7 is that it attempts to listen on IPv6 if possible, as well as IPv4.
The relevant patch hunk is:
@@ -59,13 +62,18 @@ from socket import error as socket_error self._socket_error = socket_error self._socket_timeout = socket_timeout - self._server_socket = socket.socket() + addrs = socket.getaddrinfo(host, port, socket.AF_UNSPEC, + socket.SOCK_STREAM, 0, socket.AI_PASSIVE)[0] + + (family, socktype, proto, canonname, sockaddr) = addrs + + self._server_socket = socket.socket(family, socktype, proto) # SO_REUSERADDR has a different meaning on Windows if sys.platform != 'win32': self._server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) try: - self._server_socket.bind((host, port)) + self._server_socket.bind(sockaddr) except self._socket_error, message: raise errors.CannotBindAddress(host, port, message) self._sockname = self._server_socket.getsockname()
So I guess attempting to bind to an IPv6 port is raising an unexpected sort of socket error on your system?
If you can tell us which exception is being raised, we can probably fix this to just fall back to the IPv4-only code when it occurs.
Ah, the main change to this code since 1.7 is that it attempts to listen on IPv6 if possible, as well as IPv4.
The relevant patch hunk is:
@@ -59,13 +62,18 @@
self. _socket_ error = socket_error
self. _socket_ timeout = socket_timeout getaddrinfo( host, port, socket.AF_UNSPEC, AI_PASSIVE) [0] socket( family, socktype, proto)
self. _server_ socket. setsockopt( socket. SOL_SOCKET,
socket. SO_REUSEADDR, 1) socket. bind((host, port)) socket. bind(sockaddr) CannotBindAddre ss(host, port, message)
self. _sockname = self._server_ socket. getsockname( )
from socket import error as socket_error
- self._server_socket = socket.socket()
+ addrs = socket.
+ socket.SOCK_STREAM, 0, socket.
+
+ (family, socktype, proto, canonname, sockaddr) = addrs
+
+ self._server_socket = socket.
# SO_REUSERADDR has a different meaning on Windows
if sys.platform != 'win32':
try:
- self._server_
+ self._server_
except self._socket_error, message:
raise errors.
So I guess attempting to bind to an IPv6 port is raising an unexpected sort of socket error on your system?
If you can tell us which exception is being raised, we can probably fix this to just fall back to the IPv4-only code when it occurs.