New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ftplib behaves oddly if socket timeout is greater than the default #75139
Comments
Stack overflow question with full details: https://stackoverflow.com/questions/45150568/python-ftp-socket-timeout-handling Socket timeout in ftplib can't be handled; a program crash occurs even when the relevant code is wrapped in a general catch-all. |
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. |
Thanks David. Lowering the timeout to below 60s seems to have resolved this issue. Or at least the error isn't being thrown anymore. I don't know why the error couldn't be handled in the first place, however. |
I would like to leave this issue open. It is clear that the behavior for long timeouts does not match the docs, and that should be investigated if someone has the motivation :) |
I changed the title to reflect the problem, but note that I'm *assuming* it is "greater than the default" that is the issue, I haven't actually tested that theory. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: