<div>Consider the following:</div><div><br></div><div><div>>>> import socket</div><div>>>> s = socket.socket()</div><div>>>> addr = ('', 8080)</div><div>>>> s.bind(addr)</div></div>


<div>Traceback (most recent call last):</div><div><div>  File "foo.py", line 29, in <module></div><div>    s.bind(addr)</div><div>  File "/usr/lib/python2.7/socket.py", line 224, in meth</div><div>


    return getattr(self._sock,name)(*args)</div><div>socket.error: [Errno 98] Address already in use</div></div><div><br></div><div>Problem here is that the information about the address passed to bind() is lost.</div>
<div>While playing with Tulip I noticed some effort was put into providing a more informative message:</div><div><br></div><a href="https://code.google.com/p/tulip/source/browse/tulip/base_events.py?spec=svne05013a5516da73c97d9a11ece79283839e41bd0&r=f400984a064869a9326f5159ce7f6182087cb926#292" target="_blank">https://code.google.com/p/tulip/source/browse/tulip/base_events.py?spec=svne05013a5516da73c97d9a11ece79283839e41bd0&r=f400984a064869a9326f5159ce7f6182087cb926#292</a><div>


<br></div><div><a href="https://code.google.com/p/tulip/source/browse/tulip/base_events.py?spec=svne05013a5516da73c97d9a11ece79283839e41bd0&r=f400984a064869a9326f5159ce7f6182087cb926#449" target="_blank">https://code.google.com/p/tulip/source/browse/tulip/base_events.py?spec=svne05013a5516da73c97d9a11ece79283839e41bd0&r=f400984a064869a9326f5159ce7f6182087cb926#449</a></div>


<div><br></div><div>I thought that maybe it makes sense to do that straight into the socket module by either overriding bind() (and also connect() and connect_ex()) or perhaps by providing a brand new PyErr_SetFromErrnoWithMsgObject() which can also be used elsewhere.</div>


<div>Thoughts?</div><div><br></div><div>--- Giampaolo</div>