Issue 30956: ftplib behaves oddly if socket timeout is greater than the default (original) (raw)

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 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.