[Python-checkins] CVS: python/dist/src/Modules socketmodule.c,1.119,1.120
Mark Hammond
python-dev@python.org
Sun, 23 Jul 2000 18:45:15 -0700
Update of /cvsroot/python/python/dist/src/Modules
In directory slayer.i.sourceforge.net:/tmp/cvs-serv17167
Modified Files:
socketmodule.c
Log Message:
Patch #100926 - Better error messages for socket exceptions on Windows. [Slight style differences from posted patch]
Index: socketmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/socketmodule.c,v
retrieving revision 1.119
retrieving revision 1.120
diff -C2 -r1.119 -r1.120
*** socketmodule.c 2000/07/22 23:57:55 1.119
--- socketmodule.c 2000/07/24 01:45:11 1.120
***************
*** 232,238 ****
{
#ifdef MS_WINDOWS
! if (WSAGetLastError()) {
PyObject *v;
! v = Py_BuildValue("(is)", WSAGetLastError(), "winsock error");
if (v != NULL) {
PyErr_SetObject(PySocket_Error, v);
--- 232,314 ----
{
#ifdef MS_WINDOWS
! 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;
! 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);