M
Mirko Vogt
Hey,
it seems that the socket-module behaves differently on unix / windows when a timeout is set.
Here an example:
# test.py
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print 'trying to connect...'
sock.connect(('127.0.0.1',9999))
print 'connected!'
# executed on windows
Traceback (most recent call last):
File "test.py", line 4, in <module>
sock.connect(('127.0.0.1',9999))
# executed on linux
$ python test.py
trying to connect...
Traceback (most recent call last):
File "test.py", line 4, in <module>
sock.connect(('127.0.0.1',9999))
File "<string>", line 1, in connect
socket.error: (111, 'Connection refused')
$
Even if the error-codes are different both raise an socket.error with the message 'Connection refused' - good so far.
Now I will change the code slightly - to be precise I set a timeout on the socket:
# test.py
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.settimeout(3.0) # <----------------------------------------------------------
print 'trying to connect...'
sock.connect(('127.0.0.1',9999))
print 'connected!'
# executed on linux
$ python test.py
trying to connect...
Traceback (most recent call last):
File "test.py", line 5, in <module>
sock.connect(('127.0.0.1',9999))
File "<string>", line 1, in connect
socket.error: (111, 'Connection refused')
$
# executed on windows
connected!
The code executed by python running on windows does *not* raise the exception anymore.
The Linux does as expected.
Is that behaviour common or even documented? Found nothing.
It took me lot's of time to figure this out, because there was no exception which was raised when testing for open / ports.
When I try to read from the socket (e.g. on port 9999 on which nothing runs) I get a timeout after the via settimeou() specified value.
Thanks in advance,
Mirko
it seems that the socket-module behaves differently on unix / windows when a timeout is set.
Here an example:
# test.py
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print 'trying to connect...'
sock.connect(('127.0.0.1',9999))
print 'connected!'
# executed on windows
trying to connect...C:\Python25\python.exe test.py
Traceback (most recent call last):
File "test.py", line 4, in <module>
sock.connect(('127.0.0.1',9999))
# executed on linux
$ python test.py
trying to connect...
Traceback (most recent call last):
File "test.py", line 4, in <module>
sock.connect(('127.0.0.1',9999))
File "<string>", line 1, in connect
socket.error: (111, 'Connection refused')
$
Even if the error-codes are different both raise an socket.error with the message 'Connection refused' - good so far.
Now I will change the code slightly - to be precise I set a timeout on the socket:
# test.py
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.settimeout(3.0) # <----------------------------------------------------------
print 'trying to connect...'
sock.connect(('127.0.0.1',9999))
print 'connected!'
# executed on linux
$ python test.py
trying to connect...
Traceback (most recent call last):
File "test.py", line 5, in <module>
sock.connect(('127.0.0.1',9999))
File "<string>", line 1, in connect
socket.error: (111, 'Connection refused')
$
# executed on windows
trying to connect...C:\Python25\python.exe test.py
connected!
The code executed by python running on windows does *not* raise the exception anymore.
The Linux does as expected.
Is that behaviour common or even documented? Found nothing.
It took me lot's of time to figure this out, because there was no exception which was raised when testing for open / ports.
When I try to read from the socket (e.g. on port 9999 on which nothing runs) I get a timeout after the via settimeou() specified value.
Thanks in advance,
Mirko