summaryrefslogtreecommitdiffstats
path: root/Modules/socketmodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/socketmodule.c')
-rw-r--r--Modules/socketmodule.c63
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);