[issue30956] ftplib socket timeout can't be handled

R. David Murray report at bugs.python.org
Mon Jul 17 20:53:31 EDT 2017


R. David Murray added the comment:

Given:

import socket
from ftplib import FTP
try:
    ftp = FTP('host.i.know.will.hang.com', timeout=4)
except socket.timeout:
    print('caught')

I see 'caught' printed on the console.  However, if I increase the timeout to 400, then on both 3.5 tip and 3.6 tip I get a TimeoutError, not a socket.timeout.  If I increase the timeout to 4000, I get the TimeoutError in a much shorter time than 4000 seconds.

So, *something* is wrong here.  Looking at the code it isn't obvious what.

Here is the traceback:

Traceback (most recent call last):
  File "../p36/temp.py", line 4, in <module>
    ftp = FTP('xxxx', timeout=4)
  File "/home/rdmurray/python/p35/Lib/ftplib.py", line 118, in __init__
    self.connect(host)
  File "/home/rdmurray/python/p35/Lib/ftplib.py", line 153, in connect
    source_address=self.source_address)
  File "/home/rdmurray/python/p35/Lib/socket.py", line 712, in create_connection
    raise err
  File "/home/rdmurray/python/p35/Lib/socket.py", line 703, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out


Your traceback is different because your timeout is occurring after the initial connection.  Are you sure your socket.timeout is the correct one?  You might try printing socket.__file__ to check.

----------
nosy: +r.david.murray

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue30956>
_______________________________________


More information about the Python-bugs-list mailing list