Mercurial > cpython-lru_cache-weakref
diff Modules/socketmodule.c @ 3672:cec27c93b5cb legacy-trunk
more changes for Windows, sigh
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Wed, 12 Jun 1996 04:04:22 +0000 |
| parents | 556ec82f4d93 |
| children | f6ace61c3dfe |
line wrap: on
line diff
--- a/Modules/socketmodule.c Tue Jun 11 20:12:49 1996 +0000 +++ b/Modules/socketmodule.c Wed Jun 12 04:04:22 1996 +0000 @@ -1090,7 +1090,12 @@ BUILD_FUNC_DEF_2(PySocket_socket,PyObject *,self, PyObject *,args) { PySocketSockObject *s; - int fd, family, type, proto; +#ifdef _MSC_VER + SOCKET fd; +#else + int fd; +#endif + int family, type, proto; proto = 0; if (!PyArg_Parse(args, "(ii)", &family, &type)) { PyErr_Clear(); @@ -1100,7 +1105,11 @@ Py_BEGIN_ALLOW_THREADS fd = socket(family, type, proto); Py_END_ALLOW_THREADS +#ifdef _MSC_VER + if (fd == INVALID_SOCKET) +#else if (fd < 0) +#endif return PySocket_Err(); s = PySocketSock_New(fd, family, type, proto); /* If the object can't be created, don't forget to close the @@ -1146,6 +1155,50 @@ } #endif /* NO_DUP */ +static PyObject * PySocket_WSAStartup(self, args) + PyObject *self, *args; +{ +#ifdef _MSC_VER + WSADATA WSAData; + int ret; + + if (!PyArg_NoArgs(args)) + return NULL; + ret = WSAStartup(0x0101, &WSAData); /* request version 1.1 */ + switch(ret){ + case WSASYSNOTREADY: + PyErr_SetString(PySocket_Error, + "WSAStartup failed: Network not ready\n"); + break; + case WSAVERNOTSUPPORTED: + case WSAEINVAL: + PyErr_SetString(PySocket_Error, + "WSAStartup failed: Requested version not supported"); + break; + case 0: /* no error */ + break; + default: + PyErr_SetString(PySocket_Error, + "WSAStartup failed"); + break; + } +#endif + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * PySocket_WSACleanup(self, args) + PyObject *self, *args; +{ + if (!PyArg_NoArgs(args)) + return NULL; +#ifdef _MSC_VER + WSACleanup(); +#endif + Py_INCREF(Py_None); + return Py_None; +} + /* List of functions exported by this module. */ static PyMethodDef PySocket_methods[] = { @@ -1154,6 +1207,8 @@ {"gethostname", PySocket_gethostname}, {"getservbyname", PySocket_getservbyname}, {"socket", PySocket_socket}, + {"WSAStartup", PySocket_WSAStartup}, + {"WSACleanup", PySocket_WSACleanup}, #ifndef NO_DUP {"fromfd", PySocket_fromfd}, #endif @@ -1445,34 +1500,7 @@ #ifdef MS_WIN16 /* All windows sockets require a successful WSAStartup() before use */ - { - const int opt = SO_SYNCHRONOUS_NONALERT; - WSADATA WSAData; - int ret; - ret = WSAStartup(0x0101, &WSAData); /* request version 1.1 */ - switch(ret){ - case WSASYSNOTREADY: - PyErr_SetString(PySocket_Error, - "WSAStartup failed: Network not ready\n"); - break; - case WSAVERNOTSUPPORTED: - case WSAEINVAL: - PyErr_SetString(PySocket_Error, - "WSAStartup failed: Requested version not supported"); - break; - case 0: - /* Setup sockets in non-overlapped mode by default */ - if (setsockopt(INVALID_SOCKET,SOL_SOCKET,SO_OPENTYPE, - (const char *)&opt,sizeof(opt)) != 0) - PyErr_SetString(PySocket_Error, - "setsockopt failed in initsocket"); - break; - default: - PyErr_SetString(PySocket_Error, - "WSAStartup failed"); - break; - } - } + Py_XDECREF(PySocket_WSAStartup(NULL, NULL)); #endif }
