mirror of https://github.com/python/cpython.git
Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
This commit is contained in:
parent
e28c296f0f
commit
46a733dfbf
|
@ -231,9 +231,85 @@ static PyObject *
|
|||
PySocket_Err(void)
|
||||
{
|
||||
#ifdef MS_WINDOWS
|
||||
if (WSAGetLastError()) {
|
||||
int err_no = WSAGetLastError();
|
||||
if (err_no) {
|
||||
static struct { int no; const char *msg; } *msgp, msgs[] = {
|
||||
{ WSAEINTR, "Interrupted system call" },
|
||||
{ WSAEBADF, "Bad file descriptor" },
|
||||
{ WSAEACCES, "Permission denied" },
|
||||
{ WSAEFAULT, "Bad address" },
|
||||
{ WSAEINVAL, "Invalid argument" },
|
||||
{ WSAEMFILE, "Too many open files" },
|
||||
{ WSAEWOULDBLOCK,
|
||||
"The socket operation could not complete "
|
||||
"without blocking" },
|
||||
{ WSAEINPROGRESS, "Operation now in progress" },
|
||||
{ WSAEALREADY, "Operation already in progress" },
|
||||
{ WSAENOTSOCK, "Socket operation on non-socket" },
|
||||
{ WSAEDESTADDRREQ, "Destination address required" },
|
||||
{ WSAEMSGSIZE, "Message too long" },
|
||||
{ WSAEPROTOTYPE, "Protocol wrong type for socket" },
|
||||
{ WSAENOPROTOOPT, "Protocol not available" },
|
||||
{ WSAEPROTONOSUPPORT, "Protocol not supported" },
|
||||
{ WSAESOCKTNOSUPPORT, "Socket type not supported" },
|
||||
{ WSAEOPNOTSUPP, "Operation not supported" },
|
||||
{ WSAEPFNOSUPPORT, "Protocol family not supported" },
|
||||
{ WSAEAFNOSUPPORT, "Address family not supported" },
|
||||
{ WSAEADDRINUSE, "Address already in use" },
|
||||
{ WSAEADDRNOTAVAIL,
|
||||
"Can't assign requested address" },
|
||||
{ WSAENETDOWN, "Network is down" },
|
||||
{ WSAENETUNREACH, "Network is unreachable" },
|
||||
{ WSAENETRESET,
|
||||
"Network dropped connection on reset" },
|
||||
{ WSAECONNABORTED,
|
||||
"Software caused connection abort" },
|
||||
{ WSAECONNRESET, "Connection reset by peer" },
|
||||
{ WSAENOBUFS, "No buffer space available" },
|
||||
{ WSAEISCONN, "Socket is already connected" },
|
||||
{ WSAENOTCONN, "Socket is not connected" },
|
||||
{ WSAESHUTDOWN, "Can't send after socket shutdown" },
|
||||
{ WSAETOOMANYREFS,
|
||||
"Too many references: can't splice" },
|
||||
{ WSAETIMEDOUT, "Operation timed out" },
|
||||
{ WSAECONNREFUSED, "Connection refused" },
|
||||
{ WSAELOOP, "Too many levels of symbolic links" },
|
||||
{ WSAENAMETOOLONG, "File name too long" },
|
||||
{ WSAEHOSTDOWN, "Host is down" },
|
||||
{ WSAEHOSTUNREACH, "No route to host" },
|
||||
{ WSAENOTEMPTY, "Directory not empty" },
|
||||
{ WSAEPROCLIM, "Too many processes" },
|
||||
{ WSAEUSERS, "Too many users" },
|
||||
{ WSAEDQUOT, "Disc quota exceeded" },
|
||||
{ WSAESTALE, "Stale NFS file handle" },
|
||||
{ WSAEREMOTE, "Too many levels of remote in path" },
|
||||
{ WSASYSNOTREADY,
|
||||
"Network subsystem is unvailable" },
|
||||
{ WSAVERNOTSUPPORTED,
|
||||
"WinSock version is not supported" },
|
||||
{ WSANOTINITIALISED,
|
||||
"Successful WSAStartup() not yet performed" },
|
||||
{ WSAEDISCON, "Graceful shutdown in progress" },
|
||||
/* Resolver errors */
|
||||
{ WSAHOST_NOT_FOUND, "No such host is known" },
|
||||
{ WSATRY_AGAIN, "Host not found, or server failed" },
|
||||
{ WSANO_RECOVERY,
|
||||
"Unexpected server error encountered" },
|
||||
{ WSANO_DATA, "Valid name without requested data" },
|
||||
{ WSANO_ADDRESS, "No address, look for MX record" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
PyObject *v;
|
||||
v = Py_BuildValue("(is)", WSAGetLastError(), "winsock error");
|
||||
const char *msg = "winsock error";
|
||||
|
||||
for (msgp = msgs; msgp->msg; msgp++) {
|
||||
if (err_no == msgp->no) {
|
||||
msg = msgp->msg;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
v = Py_BuildValue("(is)", err_no, msg);
|
||||
if (v != NULL) {
|
||||
PyErr_SetObject(PySocket_Error, v);
|
||||
Py_DECREF(v);
|
||||
|
|
Loading…
Reference in New Issue