New submission from George,Y:

I need to know the IP address on the other side of a broken TCP/IP connection. 

"socket.getpeername()" fails to do the job sometimes because the connection has 
been closed, and Windows Error 10038 tells the connection is no longer a socket 
so that the method getpeername is wrongly used.

Here goes the code in main thread:
-----------
mailbox = queue.Queue()

read_sockets, write_sockets, error_sockets = 
select.select(active_socks,[],[],TIMEOUT)
for sock in read_sockets:
......
    except:
        mailbox.put( (("sock_err",sock), 'localhost') )
=========

The sub thread get this message from mailbox and try to analyze the broken 
socket, to simplify I put the code and output together:

-------------
print(sock)>>>
<socket.socket [closed] fd=-1, family=AFNET, type=SOCKSTREAM, proto=0>
sock.getpeername()>>>
OS.Error[WinError10038]an operation was attempted on something that is not a 
socket
=======

Surprisingly,  this kind of error happen occasionally - sometimes the socket 
object is normal and getpeername() works fine.

So once a connection is broken, there is no way to tell the address to whom it 
connected?

----------
components: Library (Lib)
files: socket错误不识别.png
messages: 278679
nosy: George,Y
priority: normal
severity: normal
status: open
title: socket.getpeername() failure on broken TCP/IP connection
type: crash
versions: Python 3.4
Added file: http://bugs.python.org/file45095/socket错误不识别.png

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue28447>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to