summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Modules/socketmodule.c453
1 files changed, 229 insertions, 224 deletions
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 5917b43..a440f21 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -106,7 +106,8 @@ Socket methods:
# endif
#endif
-#if !defined(HAVE_GETHOSTBYNAME_R) && defined(WITH_THREAD) && !defined(MS_WINDOWS)
+#if !defined(HAVE_GETHOSTBYNAME_R) && defined(WITH_THREAD) && \
+ !defined(MS_WINDOWS)
# define USE_GETHOSTBYNAME_LOCK
#endif
@@ -184,7 +185,7 @@ int h_errno; /* not used */
#include "addrinfo.h"
#ifndef HAVE_INET_PTON
-int inet_pton (int af, const char *src, void *dst);
+int inet_pton(int af, const char *src, void *dst);
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
#endif
@@ -218,8 +219,8 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
#endif
#ifdef MS_WIN32
-# define EAFNOSUPPORT WSAEAFNOSUPPORT
-# define snprintf _snprintf
+#define EAFNOSUPPORT WSAEAFNOSUPPORT
+#define snprintf _snprintf
#endif
#if defined(PYOS_OS2) && !defined(PYCC_GCC)
@@ -260,73 +261,69 @@ PySocket_Err(void)
{
#ifdef MS_WINDOWS
int err_no = WSAGetLastError();
+ 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}
+ };
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";
@@ -348,32 +345,38 @@ PySocket_Err(void)
#endif
#if defined(PYOS_OS2) && !defined(PYCC_GCC)
- if (sock_errno() != NO_ERROR) {
- APIRET rc;
- ULONG msglen;
- char outbuf[100];
- int myerrorcode = sock_errno();
-
- /* Retrieve Socket-Related Error Message from MPTN.MSG File */
- rc = DosGetMessage(NULL, 0, outbuf, sizeof(outbuf),
- myerrorcode - SOCBASEERR + 26, "mptn.msg", &msglen);
- if (rc == NO_ERROR) {
- PyObject *v;
-
- outbuf[msglen] = '\0'; /* OS/2 Doesn't Guarantee a Terminator */
- if (strlen(outbuf) > 0) { /* If Non-Empty Msg, Trim CRLF */
- char *lastc = &outbuf[ strlen(outbuf)-1 ];
- while (lastc > outbuf && isspace(*lastc))
- *lastc-- = '\0'; /* Trim Trailing Whitespace (CRLF) */
- }
- v = Py_BuildValue("(is)", myerrorcode, outbuf);
- if (v != NULL) {
- PyErr_SetObject(PySocket_Error, v);
- Py_DECREF(v);
- }
- return NULL;
- }
- }
+ if (sock_errno() != NO_ERROR) {
+ APIRET rc;
+ ULONG msglen;
+ char outbuf[100];
+ int myerrorcode = sock_errno();
+
+ /* Retrieve socket-related error message from MPTN.MSG file */
+ rc = DosGetMessage(NULL, 0, outbuf, sizeof(outbuf),
+ myerrorcode - SOCBASEERR + 26,
+ "mptn.msg",
+ &msglen);
+ if (rc == NO_ERROR) {
+ PyObject *v;
+
+ /* OS/2 doesn't guarantee a terminator */
+ outbuf[msglen] = '\0';
+ if (strlen(outbuf) > 0) {
+ /* If non-empty msg, trim CRLF */
+ char *lastc = &outbuf[ strlen(outbuf)-1 ];
+ while (lastc > outbuf && isspace(*lastc)) {
+ /* Trim trailing whitespace (CRLF) */
+ *lastc-- = '\0';
+ }
+ }
+ v = Py_BuildValue("(is)", myerrorcode, outbuf);
+ if (v != NULL) {
+ PyErr_SetObject(PySocket_Error, v);
+ Py_DECREF(v);
+ }
+ return NULL;
+ }
+ }
#endif
return PyErr_SetFromErrno(PySocket_Error);
@@ -443,9 +446,8 @@ timeout_err(void)
return NULL;
}
-/* Function to perfrom the setting of socket blocking mode
- * internally. block = (1 | 0).
- */
+/* Function to perform the setting of socket blocking mode
+ internally. block = (1 | 0). */
static int
internal_setblocking(PySocketSockObject *s, int block)
{
@@ -458,8 +460,8 @@ internal_setblocking(PySocketSockObject *s, int block)
Py_BEGIN_ALLOW_THREADS
#ifdef __BEOS__
block = !block;
- setsockopt( s->sock_fd, SOL_SOCKET, SO_NONBLOCK,
- (void *)(&block), sizeof(int));
+ setsockopt(s->sock_fd, SOL_SOCKET, SO_NONBLOCK,
+ (void *)(&block), sizeof(int));
#else
#ifndef RISCOS
#ifndef MS_WINDOWS
@@ -487,10 +489,9 @@ internal_setblocking(PySocketSockObject *s, int block)
}
/* For access to the select module to poll the socket for timeout
- * functionality. writing is 1 for writing, 0 for reading.
- * Return value: -1 if error, 0 if not ready, >= 1 if ready.
- * An exception is set when the return value is <= 0 (!).
- */
+ functionality. writing is 1 for writing, 0 for reading.
+ Return value: -1 if error, 0 if not ready, >= 1 if ready.
+ An exception is set when the return value is <= 0 (!). */
static int
internal_select(PySocketSockObject *s, int writing)
{
@@ -517,8 +518,7 @@ internal_select(PySocketSockObject *s, int writing)
}
/* Set the error if the timeout has elapsed, i.e, we were not
- * polled.
- */
+ polled. */
if (count == 0)
timeout_err();
@@ -543,9 +543,8 @@ init_sockobject(PySocketSockObject *s,
s->errorhandler = &PySocket_Err;
#ifdef RISCOS
- if(taskwindow) {
+ if (taskwindow)
socketioctl(s->sock_fd, 0x80046679, (u_long*)&block);
- }
#endif
}
@@ -581,7 +580,7 @@ PyThread_type_lock gethostbyname_lock;
an error occurred; then an exception is raised. */
static int
-setipaddr(char* name, struct sockaddr * addr_ret, int af)
+setipaddr(char *name, struct sockaddr *addr_ret, int af)
{
struct addrinfo hints, *res;
int error;
@@ -643,12 +642,12 @@ setipaddr(char* name, struct sockaddr * addr_ret, int af)
hints.ai_family = af;
error = getaddrinfo(name, NULL, &hints, &res);
#if defined(__digital__) && defined(__unix__)
- if (error == EAI_NONAME && af == AF_UNSPEC) {
- /* On Tru64 V5.1, numeric-to-addr conversion
- fails if no address family is given. Assume IPv4 for now.*/
- hints.ai_family = AF_INET;
- error = getaddrinfo(name, NULL, &hints, &res);
- }
+ if (error == EAI_NONAME && af == AF_UNSPEC) {
+ /* On Tru64 V5.1, numeric-to-addr conversion fails
+ if no address family is given. Assume IPv4 for now.*/
+ hints.ai_family = AF_INET;
+ error = getaddrinfo(name, NULL, &hints, &res);
+ }
#endif
if (error) {
PyGAI_Err(error);
@@ -741,8 +740,11 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen)
PyObject *ret = NULL;
if (addrobj) {
a = (struct sockaddr_in6 *)addr;
- ret = Py_BuildValue("Oiii", addrobj, ntohs(a->sin6_port),
- a->sin6_flowinfo, a->sin6_scope_id);
+ ret = Py_BuildValue("Oiii",
+ addrobj,
+ ntohs(a->sin6_port),
+ a->sin6_flowinfo,
+ a->sin6_scope_id);
Py_DECREF(addrobj);
}
return ret;
@@ -761,9 +763,13 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen)
if (ioctl(sockfd, SIOCGIFNAME, &ifr) == 0)
ifname = ifr.ifr_name;
}
- return Py_BuildValue("shbhs#", ifname, ntohs(a->sll_protocol),
- a->sll_pkttype, a->sll_hatype,
- a->sll_addr, a->sll_halen);
+ return Py_BuildValue("shbhs#",
+ ifname,
+ ntohs(a->sll_protocol),
+ a->sll_pkttype,
+ a->sll_hatype,
+ a->sll_addr,
+ a->sll_halen);
}
#endif
@@ -822,9 +828,11 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
int port;
addr=(struct sockaddr_in*)&(s->sock_addr).in;
if (!PyTuple_Check(args)) {
- PyErr_Format(PyExc_TypeError,
- "getsockaddrarg: AF_INET address must be tuple, not %.500s",
- args->ob_type->tp_name);
+ PyErr_Format(
+ PyExc_TypeError,
+ "getsockaddrarg: "
+ "AF_INET address must be tuple, not %.500s",
+ args->ob_type->tp_name);
return 0;
}
if (!PyArg_ParseTuple(args, "si:getsockaddrarg", &host, &port))
@@ -847,7 +855,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
addr = (struct sockaddr_in6*)&(s->sock_addr).in6;
flowinfo = scope_id = 0;
if (!PyArg_ParseTuple(args, "si|ii", &host, &port, &flowinfo,
- &scope_id)) {
+ &scope_id)) {
return 0;
}
if (setipaddr(host, (struct sockaddr *)addr, AF_INET6) < 0)
@@ -1007,8 +1015,7 @@ PySocketSock_accept(PySocketSockObject *s)
}
/* At this point, we really have an error, whether using timeout
- * behavior or regular socket behavior
- */
+ behavior or regular socket behavior */
#ifdef MS_WINDOWS
if (newfd == INVALID_SOCKET)
#else
@@ -1028,7 +1035,7 @@ PySocketSock_accept(PySocketSockObject *s)
goto finally;
}
addr = makesockaddr(s->sock_fd, (struct sockaddr *)addrbuf,
- addrlen);
+ addrlen);
if (addr == NULL)
goto finally;
@@ -1061,8 +1068,7 @@ PySocketSock_setblocking(PySocketSockObject *s, PyObject *arg)
s->sock_blocking = block;
/* If we're not using timeouts, actually set the blocking to give
- * old python behavior.
- */
+ old python behavior. */
if (s->sock_timeout < 0.0)
internal_setblocking(s, block);
@@ -1076,10 +1082,9 @@ static char setblocking_doc[] =
Set the socket to blocking (flag is true) or non-blocking (false).\n\
This uses the FIONBIO ioctl with the O_NDELAY flag.";
-/* s.settimeout(float | None) method.
- * Causes an exception to be raised when the given time has
- * elapsed when performing a blocking socket operation.
- */
+/* s.settimeout(None | float) method.
+ Causes an exception to be raised when the given time has
+ elapsed when performing a blocking socket operation. */
static PyObject *
PySocketSock_settimeout(PySocketSockObject *s, PyObject *arg)
{
@@ -1100,17 +1105,16 @@ PySocketSock_settimeout(PySocketSockObject *s, PyObject *arg)
s->sock_timeout = value;
/* The semantics of setting socket timeouts are:
- * If you settimeout(!=None):
- * The actual socket gets put in non-blocking mode and the select
- * is used to control timeouts.
- * Else if you settimeout(None) [then value is -1.0]:
- * The old behavior is used AND automatically, the socket is set
- * to blocking mode. That means that someone who was doing
- * non-blocking stuff before, sets a timeout, and then unsets
- * one, will have to call setblocking(0) again if he wants
- * non-blocking stuff. This makes sense because timeout stuff is
- * blocking by nature.
- */
+ If you settimeout(!=None):
+ The actual socket gets put in non-blocking mode and the select
+ is used to control timeouts.
+ Else if you settimeout(None) [then value is -1.0]:
+ The old behavior is used AND automatically, the socket is set
+ to blocking mode. That means that someone who was doing
+ non-blocking stuff before, sets a timeout, and then unsets
+ one, will have to call setblocking(0) again if he wants
+ non-blocking stuff. This makes sense because timeout stuff is
+ blocking by nature. */
internal_setblocking(s, value < 0.0);
s->sock_blocking = 1; /* Always negate setblocking() */
@@ -1120,17 +1124,13 @@ PySocketSock_settimeout(PySocketSockObject *s, PyObject *arg)
}
static char settimeout_doc[] =
-"settimeout(seconds)\n\
+"settimeout(timeout)\n\
\n\
-Set a timeout on blocking socket operations. 'seconds' can be a floating,\n\
-integer, or long number of seconds, or the None value. Socket operations\n\
-will raise an exception if the timeout period has elapsed before the\n\
-operation has completed. Setting a timeout of None disables timeouts\n\
-on socket operations.";
-
-/* s.gettimeout () method.
- * Returns the timeout associated with a socket.
- */
+Set a timeout on blocking socket operations. 'timeout' can be a float,\n\
+giving seconds, or None. Setting a timeout of None disables timeout.";
+
+/* s.gettimeout() method.
+ Returns the timeout associated with a socket. */
static PyObject *
PySocketSock_gettimeout(PySocketSockObject *s)
{
@@ -1356,8 +1356,9 @@ PySocketSock_connect(PySocketSockObject *s, PyObject *addro)
/* Check if we have an error */
if (!s->sock_blocking)
- return s->errorhandler ();
- /* Check if we have a true failure for a blocking socket */
+ return s->errorhandler();
+ /* Check if we have a true failure
+ for a blocking socket */
#ifdef MS_WINDOWS
if (errno != WSAEWOULDBLOCK)
#else
@@ -1423,7 +1424,8 @@ PySocketSock_connect_ex(PySocketSockObject *s, PyObject *addro)
/* Check if we have an error */
if (!s->sock_blocking)
goto conex_finally;
- /* Check if we have a true failure for a blocking socket */
+ /* Check if we have a true failure
+ for a blocking socket */
#ifdef MS_WINDOWS
if (errno != WSAEWOULDBLOCK)
#else
@@ -1753,7 +1755,7 @@ PySocketSock_recvfrom(PySocketSockObject *s, PyObject *args)
return NULL;
if (!(addr = makesockaddr(s->sock_fd, (struct sockaddr *)addrbuf,
- addrlen)))
+ addrlen)))
goto finally;
ret = Py_BuildValue("OO", buf, addr);
@@ -1939,11 +1941,11 @@ static PyMethodDef PySocketSock_methods[] = {
{"fileno", (PyCFunction)PySocketSock_fileno, METH_NOARGS,
fileno_doc},
#ifdef HAVE_GETPEERNAME
- {"getpeername", (PyCFunction)PySocketSock_getpeername,
- METH_NOARGS, getpeername_doc},
+ {"getpeername", (PyCFunction)PySocketSock_getpeername,
+ METH_NOARGS, getpeername_doc},
#endif
{"getsockname", (PyCFunction)PySocketSock_getsockname,
- METH_NOARGS, getsockname_doc},
+ METH_NOARGS, getsockname_doc},
{"getsockopt", (PyCFunction)PySocketSock_getsockopt, METH_VARARGS,
getsockopt_doc},
{"listen", (PyCFunction)PySocketSock_listen, METH_O,
@@ -2002,15 +2004,17 @@ PySocketSock_repr(PySocketSockObject *s)
ugly printf formatter for decimal pointer length integer
printing, only bother if necessary*/
PyErr_SetString(PyExc_OverflowError,
- "no printf formatter to display the socket descriptor in decimal");
+ "no printf formatter to display "
+ "the socket descriptor in decimal");
return NULL;
}
#endif
- PyOS_snprintf(buf, sizeof(buf),
- "<socket object, fd=%ld, family=%d, type=%d, protocol=%d>",
- (long)s->sock_fd, s->sock_family,
- s->sock_type,
- s->sock_proto);
+ PyOS_snprintf(
+ buf, sizeof(buf),
+ "<socket object, fd=%ld, family=%d, type=%d, protocol=%d>",
+ (long)s->sock_fd, s->sock_family,
+ s->sock_type,
+ s->sock_proto);
return PyString_FromString(buf);
}
@@ -2106,6 +2110,7 @@ send() -- send data, may not send all of it\n\
sendall() -- send all data\n\
sendto() -- send data to a given address\n\
setblocking() -- set or clear the blocking I/O flag\n\
+settimeout() -- set or clear the timeout\n\
setsockopt() -- set socket options\n\
shutdown() -- shut down traffic in one or both directions\n\
\n\
@@ -2226,11 +2231,13 @@ gethost_common(struct hostent *h, struct sockaddr *addr, int alen, int af)
if (h->h_addrtype != af) {
#ifdef HAVE_STRERROR
- /* Let's get real error message to return */
- PyErr_SetString(PySocket_Error, (char *)strerror(EAFNOSUPPORT));
-#else
+ /* Let's get real error message to return */
PyErr_SetString(PySocket_Error,
- "Address family not supported by protocol family");
+ (char *)strerror(EAFNOSUPPORT));
+#else
+ PyErr_SetString(
+ PySocket_Error,
+ "Address family not supported by protocol family");
#endif
return NULL;
}
@@ -2312,7 +2319,7 @@ gethost_common(struct hostent *h, struct sockaddr *addr, int alen, int af)
default: /* can't happen */
PyErr_SetString(PySocket_Error,
- "unsupported address family");
+ "unsupported address family");
return NULL;
}
@@ -2367,7 +2374,8 @@ PySocket_gethostbyname_ex(PyObject *self, PyObject *args)
Py_BEGIN_ALLOW_THREADS
#ifdef HAVE_GETHOSTBYNAME_R
#if defined(HAVE_GETHOSTBYNAME_R_6_ARG)
- result = gethostbyname_r(name, &hp_allocated, buf, buf_len, &h, &errnop);
+ result = gethostbyname_r(name, &hp_allocated, buf, buf_len,
+ &h, &errnop);
#elif defined(HAVE_GETHOSTBYNAME_R_5_ARG)
h = gethostbyname_r(name, &hp_allocated, buf, buf_len, &errnop);
#else /* HAVE_GETHOSTBYNAME_R_3_ARG */
@@ -2383,13 +2391,12 @@ PySocket_gethostbyname_ex(PyObject *self, PyObject *args)
#endif /* HAVE_GETHOSTBYNAME_R */
Py_END_ALLOW_THREADS
/* Some C libraries would require addr.__ss_family instead of
- * addr.ss_family.
- * Therefore, we cast the sockaddr_storage into sockaddr to
- * access sa_family.
- */
+ addr.ss_family.
+ Therefore, we cast the sockaddr_storage into sockaddr to
+ access sa_family. */
sa = (struct sockaddr*)&addr;
ret = gethost_common(h, (struct sockaddr *)&addr, sizeof(addr),
- sa->sa_family);
+ sa->sa_family);
#ifdef USE_GETHOSTBYNAME_LOCK
PyThread_release_lock(gethostbyname_lock);
#endif
@@ -2410,7 +2417,7 @@ static PyObject *
PySocket_gethostbyaddr(PyObject *self, PyObject *args)
{
#ifdef ENABLE_IPV6
- struct sockaddr_storage addr;
+ struct sockaddr_storage addr;
#else
struct sockaddr_in addr;
#endif
@@ -2664,12 +2671,7 @@ static char htonl_doc[] =
\n\
Convert a 32-bit integer from host to network byte order.";
-/*
- * socket.inet_aton() and socket.inet_ntoa() functions
- *
- * written 20 Aug 1999 by Ben Gertzfield <che@debian.org> <- blame him!
- *
- */
+/* socket.inet_aton() and socket.inet_ntoa() functions. */
static char inet_aton_doc[] =
"inet_aton(string) -> packed 32-bit IP representation\n\
@@ -2827,7 +2829,8 @@ PySocket_getnameinfo(PyObject *self, PyObject *args)
flags = flowinfo = scope_id = 0;
if (!PyArg_ParseTuple(args, "Oi:getnameinfo", &sa, &flags))
return NULL;
- if (!PyArg_ParseTuple(sa, "si|ii", &hostp, &port, &flowinfo, &scope_id))
+ if (!PyArg_ParseTuple(sa, "si|ii",
+ &hostp, &port, &flowinfo, &scope_id))
return NULL;
PyOS_snprintf(pbuf, sizeof(pbuf), "%d", port);
memset(&hints, 0, sizeof(hints));
@@ -2951,8 +2954,9 @@ NTinit(void)
break;
case WSAVERNOTSUPPORTED:
case WSAEINVAL:
- PyErr_SetString(PyExc_ImportError,
- "WSAStartup failed: requested version not supported");
+ PyErr_SetString(
+ PyExc_ImportError,
+ "WSAStartup failed: requested version not supported");
break;
default:
PyOS_snprintf(buf, sizeof(buf),
@@ -2972,29 +2976,29 @@ NTinit(void)
static void
OS2cleanup(void)
{
- /* No cleanup is necessary for OS/2 Sockets */
+ /* No cleanup is necessary for OS/2 Sockets */
}
static int
OS2init(void)
{
#if !defined(PYCC_GCC)
- char reason[64];
- int rc = sock_init();
+ char reason[64];
+ int rc = sock_init();
- if (rc == 0) {
- atexit(OS2cleanup);
- return 1; /* Indicate Success */
- }
+ if (rc == 0) {
+ atexit(OS2cleanup);
+ return 1; /* Indicate Success */
+ }
- PyOS_snprintf(reason, sizeof(reason),
- "OS/2 TCP/IP Error# %d", sock_errno());
- PyErr_SetString(PyExc_ImportError, reason);
+ PyOS_snprintf(reason, sizeof(reason),
+ "OS/2 TCP/IP Error# %d", sock_errno());
+ PyErr_SetString(PyExc_ImportError, reason);
- return 0; /* Indicate Failure */
+ return 0; /* Indicate Failure */
#else
- /* no need to initialise sockets with GCC/EMX */
- return 1;
+ /* no need to initialise sockets with GCC/EMX */
+ return 1;
#endif
}
@@ -3005,26 +3009,27 @@ OS2init(void)
static
PySocketModule_APIObject PySocketModuleAPI =
{
- &PySocketSock_Type,
+ &PySocketSock_Type,
};
/* Initialize this module.
- * This is called when the first 'import socket' is done,
- * via a table in config.c, if config.c is compiled with USE_SOCKET
- * defined.
- *
- * For MS_WINDOWS (which means any Windows variant), this module
- * is actually called "_socket", and there's a wrapper "socket.py"
- * which implements some missing functionality (such as makefile(),
- * dup() and fromfd()). The import of "_socket" may fail with an
- * ImportError exception if initialization of WINSOCK fails. When
- * WINSOCK is initialized succesfully, a call to WSACleanup() is
- * scheduled to be made at exit time.
- *
- * For OS/2, this module is also called "_socket" and uses a wrapper
- * "socket.py" which implements that functionality that is missing
- * when PC operating systems don't put socket descriptors in the
- * operating system's filesystem layer.
+
+ This is called when the first 'import socket' is done,
+ via a table in config.c, if config.c is compiled with USE_SOCKET
+ defined.
+
+ For MS_WINDOWS (which means any Windows variant), this module
+ is actually called "_socket", and there's a wrapper "socket.py"
+ which implements some missing functionality (such as makefile(),
+ dup() and fromfd()). The import of "_socket" may fail with an
+ ImportError exception if initialization of WINSOCK fails. When
+ WINSOCK is initialized succesfully, a call to WSACleanup() is
+ scheduled to be made at exit time.
+
+ For OS/2, this module is also called "_socket" and uses a wrapper
+ "socket.py" which implements that functionality that is missing
+ when PC operating systems don't put socket descriptors in the
+ operating system's filesystem layer.
*/
static char module_doc[] =
@@ -3055,8 +3060,8 @@ init_socket(void)
PySocketSock_Type.tp_getattro = PyObject_GenericGetAttr;
PySocketSock_Type.tp_alloc = PyType_GenericAlloc;
PySocketSock_Type.tp_free = PyObject_Del;
- m = Py_InitModule3(PySocket_MODULE_NAME,
- PySocket_methods,
+ m = Py_InitModule3(PySocket_MODULE_NAME,
+ PySocket_methods,
module_doc);
PySocket_Error = PyErr_NewException("socket.error", NULL, NULL);
@@ -3216,7 +3221,7 @@ init_socket(void)
#ifdef SOMAXCONN
PyModule_AddIntConstant(m, "SOMAXCONN", SOMAXCONN);
#else
- PyModule_AddIntConstant(m, "SOMAXCONN", 5); /* Common value */
+ PyModule_AddIntConstant(m, "SOMAXCONN", 5); /* Common value */
#endif
/* Flags for send, recv */
@@ -3666,10 +3671,10 @@ init_socket(void)
/* Simplistic emulation code for inet_pton that only works for IPv4 */
#ifndef HAVE_INET_PTON
-int
+int
inet_pton (int af, const char *src, void *dst)
{
- if(af == AF_INET){
+ if (af == AF_INET){
long packed_addr;
packed_addr = inet_addr(src);
if (packed_addr == INADDR_NONE)