summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1996-06-12 04:04:22 (GMT)
committerGuido van Rossum <guido@python.org>1996-06-12 04:04:22 (GMT)
commitd639d4d6d6ef973589eb151991de81677c1d38a4 (patch)
tree9df357acaeec6ff47e3a80cdd889396fb8494f87 /Modules
parent601d332a3f99820820e9260b2cf461ddd44490ed (diff)
downloadcpython-d639d4d6d6ef973589eb151991de81677c1d38a4.zip
cpython-d639d4d6d6ef973589eb151991de81677c1d38a4.tar.gz
cpython-d639d4d6d6ef973589eb151991de81677c1d38a4.tar.bz2
more changes for Windows, sigh
Diffstat (limited to 'Modules')
-rw-r--r--Modules/socketmodule.c86
1 files changed, 57 insertions, 29 deletions
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 1c53d72..204dc29 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -1090,7 +1090,12 @@ static PyObject *
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 @@ BUILD_FUNC_DEF_2(PySocket_socket,PyObject *,self, PyObject *,args)
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 @@ BUILD_FUNC_DEF_2(PySocket_fromfd,PyObject *,self, PyObject *,args)
}
#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 @@ static PyMethodDef PySocket_methods[] = {
{"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 @@ initsocket()
#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
}