[ python-Bugs-708927 ] socket timeouts produce wrong errors in win32

SourceForge.net noreply at sourceforge.net
Wed Jun 2 07:22:10 EDT 2004


Bugs item #708927, was opened at 2003-03-24 18:59
Message generated for change (Comment added) made by troels
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=708927&group_id=5470

Category: Python Library
Group: Python 2.3
Status: Open
Resolution: None
Priority: 5
Submitted By: Greg Chapman (glchapman)
Assigned to: Nobody/Anonymous (nobody)
Summary: socket timeouts produce wrong errors in win32

Initial Comment:
Here's a session:

Python 2.3a2 (#39, Feb 19 2003, 17:58:58) [MSC v.1200 
32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more 
information.
>>> import socket
>>> socket.setdefaulttimeout(0.01)
>>> import urllib
>>> urllib.urlopen('http://www.python.org')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "c:\Python23\lib\urllib.py", line 76, in urlopen
    return opener.open(url)
  File "c:\Python23\lib\urllib.py", line 181, in open
    return getattr(self, name)(url)
  File "c:\Python23\lib\urllib.py", line 297, in open_http
    h.endheaders()
  File "c:\Python23\lib\httplib.py", line 705, in endheaders
    self._send_output()
  File "c:\Python23\lib\httplib.py", line 591, in 
_send_output
    self.send(msg)
  File "c:\Python23\lib\httplib.py", line 558, in send
    self.connect()
  File "c:\Python23\lib\httplib.py", line 798, in connect

IOError: [Errno socket error] (2, 'No such file or directory')
>>> urllib.urlopen('http://www.python.org')
< SNIP >

IOError: [Errno socket error] (0, 'Error')

Looking at socketmodule.c, it appears internal_connect 
must be taking the path which (under MS_WINDOWS) 
calls select to see if there was a timeout.  select must 
be returning 0 (to signal a timeout), but it apparently 
does not call WSASetLastError, so when set_error is 
called, WSAGetLastError returns 0, and the ultimate 
error generated comes from the call to 
PyErr_SetFromErrNo.  Perhaps in this case 
internal_connect should itself call WSASetLastError 
(with WSAETIMEDOUT rather than 
WSAEWOULDBLOCK?).

The reason I ran into this is I was planning to convert 
some code which used the timeoutsocket module under 
2.2.  That module raises a Timeout exception (which the 
code was catching) and I was trying to figure out what 
the equivalent exception would be from the normal 
socket module.  Perhaps the socket module should 
define some sort of timeout exception class so it would 
be easier to detect timeouts as opposed to other socket 
errors.


----------------------------------------------------------------------

Comment By: Troels Walsted Hansen (troels)
Date: 2004-06-02 13:22

Message:
Logged In: YES 
user_id=32863

I think this may be fixed. I wasn't able to reproduce the
problem with Python 2.3.4 on Windows XP SP1.

Python 2.3.4 (#53, May 25 2004, 21:17:02) [MSC v.1200 32 bit
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more
information.
>>> import socket
>>> socket.setdefaulttimeout(0.01)
>>> import urllib
>>> urllib.urlopen('http://www.python.org')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "C:\Program Files\Python23\lib\urllib.py", line 76,
in urlopen
    return opener.open(url)
  File "C:\Program Files\Python23\lib\urllib.py", line 181,
in open
    return getattr(self, name)(url)
  File "C:\Program Files\Python23\lib\urllib.py", line 297,
in open_http
    h.endheaders()
  File "C:\Program Files\Python23\lib\httplib.py", line 712,
in endheaders
    self._send_output()
  File "C:\Program Files\Python23\lib\httplib.py", line 597,
in _send_output
    self.send(msg)
  File "C:\Program Files\Python23\lib\httplib.py", line 564,
in send
    self.connect()
  File "C:\Program Files\Python23\lib\httplib.py", line 548,
in connect
    raise socket.error, msg
IOError: [Errno socket error] timed out

Repeatedly calling the code below gives the same exception
and backtrace every time.
>>> urllib.urlopen('http://www.python.org')


----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=708927&group_id=5470



More information about the Python-bugs-list mailing list