diff options
Diffstat (limited to 'Modules/socketmodule.c')
-rw-r--r-- | Modules/socketmodule.c | 63 |
1 files changed, 33 insertions, 30 deletions
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index ea546da..c0c9c84 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -678,9 +678,11 @@ internal_select(PySocketSockObject *s, int writing) /* See if the socket is ready */ if (writing) - n = select(s->sock_fd+1, NULL, &fds, NULL, &tv); + n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), + NULL, &fds, NULL, &tv); else - n = select(s->sock_fd+1, &fds, NULL, NULL, &tv); + n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), + &fds, NULL, NULL, &tv); } #endif @@ -937,7 +939,7 @@ makebdaddr(bdaddr_t *bdaddr) /*ARGSUSED*/ static PyObject * -makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto) +makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto) { if (addrlen == 0) { /* No address -- may be recvfrom() from known socket */ @@ -1908,7 +1910,8 @@ internal_connect(PySocketSockObject *s, struct sockaddr *addr, int addrlen, FD_SET(s->sock_fd, &fds); FD_ZERO(&fds_exc); FD_SET(s->sock_fd, &fds_exc); - res = select(s->sock_fd+1, NULL, &fds, &fds_exc, &tv); + res = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), + NULL, &fds, &fds_exc, &tv); if (res == 0) { res = WSAEWOULDBLOCK; timeout = 1; @@ -2151,10 +2154,10 @@ will allow before refusing new connections."); * also possible that we return a number of bytes smaller than the request * bytes. */ -static ssize_t -sock_recv_guts(PySocketSockObject *s, char* cbuf, int len, int flags) +static Py_ssize_t +sock_recv_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags) { - ssize_t outlen = -1; + Py_ssize_t outlen = -1; int timeout; #ifdef __VMS int remaining; @@ -2236,11 +2239,11 @@ sock_recv_guts(PySocketSockObject *s, char* cbuf, int len, int flags) static PyObject * sock_recv(PySocketSockObject *s, PyObject *args) { - int recvlen, flags = 0; - ssize_t outlen; + Py_ssize_t recvlen, outlen; + int flags = 0; PyObject *buf; - if (!PyArg_ParseTuple(args, "i|i:recv", &recvlen, &flags)) + if (!PyArg_ParseTuple(args, "n|i:recv", &recvlen, &flags)) return NULL; if (recvlen < 0) { @@ -2287,14 +2290,13 @@ sock_recv_into(PySocketSockObject *s, PyObject *args, PyObject *kwds) { static char *kwlist[] = {"buffer", "nbytes", "flags", 0}; - int recvlen = 0, flags = 0; - ssize_t readlen; + int flags = 0; Py_buffer pbuf; char *buf; - int buflen; + Py_ssize_t buflen, readlen, recvlen = 0; /* Get the buffer's memory */ - if (!PyArg_ParseTupleAndKeywords(args, kwds, "w*|ii:recv_into", kwlist, + if (!PyArg_ParseTupleAndKeywords(args, kwds, "w*|ni:recv_into", kwlist, &pbuf, &recvlen, &flags)) return NULL; buf = pbuf.buf; @@ -2354,13 +2356,13 @@ See recv() for documentation about the flags."); * 'addr' is a return value for the address object. Note that you must decref * it yourself. */ -static ssize_t -sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, int len, int flags, +static Py_ssize_t +sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags, PyObject** addr) { sock_addr_t addrbuf; int timeout; - ssize_t n = -1; + Py_ssize_t n = -1; socklen_t addrlen; *addr = NULL; @@ -2416,10 +2418,10 @@ sock_recvfrom(PySocketSockObject *s, PyObject *args) PyObject *buf = NULL; PyObject *addr = NULL; PyObject *ret = NULL; - int recvlen, flags = 0; - ssize_t outlen; + int flags = 0; + Py_ssize_t recvlen, outlen; - if (!PyArg_ParseTuple(args, "i|i:recvfrom", &recvlen, &flags)) + if (!PyArg_ParseTuple(args, "n|i:recvfrom", &recvlen, &flags)) return NULL; if (recvlen < 0) { @@ -2467,15 +2469,14 @@ sock_recvfrom_into(PySocketSockObject *s, PyObject *args, PyObject* kwds) { static char *kwlist[] = {"buffer", "nbytes", "flags", 0}; - int recvlen = 0, flags = 0; - ssize_t readlen; + int flags = 0; Py_buffer pbuf; char *buf; - int buflen; + Py_ssize_t readlen, buflen, recvlen = 0; PyObject *addr = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "w*|ii:recvfrom_into", + if (!PyArg_ParseTupleAndKeywords(args, kwds, "w*|ni:recvfrom_into", kwlist, &pbuf, &recvlen, &flags)) return NULL; @@ -2505,7 +2506,7 @@ sock_recvfrom_into(PySocketSockObject *s, PyObject *args, PyObject* kwds) PyBuffer_Release(&pbuf); /* Return the number of bytes read and the address. Note that we do not do anything special here in the case that readlen < recvlen. */ - return Py_BuildValue("lN", readlen, addr); + return Py_BuildValue("nN", readlen, addr); } PyDoc_STRVAR(recvfrom_into_doc, @@ -2520,7 +2521,8 @@ static PyObject * sock_send(PySocketSockObject *s, PyObject *args) { char *buf; - int len, n = -1, flags = 0, timeout; + Py_ssize_t len, n = -1; + int flags = 0, timeout; Py_buffer pbuf; if (!PyArg_ParseTuple(args, "y*|i:send", &pbuf, &flags)) @@ -2551,7 +2553,7 @@ sock_send(PySocketSockObject *s, PyObject *args) } if (n < 0) return s->errorhandler(); - return PyLong_FromLong((long)n); + return PyLong_FromSsize_t(n); } PyDoc_STRVAR(send_doc, @@ -2568,7 +2570,8 @@ static PyObject * sock_sendall(PySocketSockObject *s, PyObject *args) { char *buf; - int len, n = -1, flags = 0, timeout; + Py_ssize_t len, n = -1; + int flags = 0, timeout; Py_buffer pbuf; if (!PyArg_ParseTuple(args, "y*|i:sendall", &pbuf, &flags)) @@ -2678,7 +2681,7 @@ sock_sendto(PySocketSockObject *s, PyObject *args) } if (n < 0) return s->errorhandler(); - return PyLong_FromLong((long)n); + return PyLong_FromSsize_t(n); } PyDoc_STRVAR(sendto_doc, @@ -3993,7 +3996,7 @@ socket_getnameinfo(PyObject *self, PyObject *args) } #endif } - error = getnameinfo(res->ai_addr, res->ai_addrlen, + error = getnameinfo(res->ai_addr, (socklen_t) res->ai_addrlen, hbuf, sizeof(hbuf), pbuf, sizeof(pbuf), flags); if (error) { set_gaierror(error); |