summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c')
-rw-r--r--Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c46
1 files changed, 29 insertions, 17 deletions
diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c b/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c
index 6022565188a..d6dd004e7e2 100644
--- a/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c
+++ b/Build/source/texk/web2c/luatexdir/luasocket/src/wsocket.c
@@ -4,8 +4,6 @@
*
* The penalty of calling select to avoid busy-wait is only paid when
* the I/O call fail in the first place.
-*
-* RCS ID: $Id: wsocket.c,v 1.36 2007/06/11 23:44:54 diego Exp $
\*=========================================================================*/
#include <string.h>
@@ -54,7 +52,7 @@ int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
if (timeout_iszero(tm)) return IO_TIMEOUT; /* optimize timeout == 0 case */
if (sw & WAITFD_R) {
FD_ZERO(&rfds);
- FD_SET(*ps, &rfds);
+ FD_SET(*ps, &rfds);
rp = &rfds;
}
if (sw & WAITFD_W) { FD_ZERO(&wfds); FD_SET(*ps, &wfds); wp = &wfds; }
@@ -171,11 +169,7 @@ int socket_listen(p_socket ps, int backlog) {
\*-------------------------------------------------------------------------*/
int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len,
p_timeout tm) {
- SA daddr;
- socklen_t dlen = sizeof(daddr);
if (*ps == SOCKET_INVALID) return IO_CLOSED;
- if (!addr) addr = &daddr;
- if (!len) len = &dlen;
for ( ;; ) {
int err;
/* try to get client socket */
@@ -187,8 +181,6 @@ int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len,
/* call select to avoid busy wait */
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
}
- /* can't reach here */
- return IO_UNKNOWN;
}
/*-------------------------------------------------------------------------*\
@@ -207,7 +199,7 @@ int socket_send(p_socket ps, const char *data, size_t count,
/* loop until we send something or we give up on error */
for ( ;; ) {
/* try to send something */
- int put = send(*ps, data, (int) count, 0);
+ int put = send(*ps, data, (int) count, 0);
/* if we sent something, we are done */
if (put > 0) {
*sent = put;
@@ -220,8 +212,6 @@ int socket_send(p_socket ps, const char *data, size_t count,
/* avoid busy wait */
if ((err = socket_waitfd(ps, WAITFD_W, tm)) != IO_DONE) return err;
}
- /* can't reach here */
- return IO_UNKNOWN;
}
/*-------------------------------------------------------------------------*\
@@ -243,7 +233,6 @@ int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,
if (err != WSAEWOULDBLOCK) return err;
if ((err = socket_waitfd(ps, WAITFD_W, tm)) != IO_DONE) return err;
}
- return IO_UNKNOWN;
}
/*-------------------------------------------------------------------------*\
@@ -264,7 +253,6 @@ int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm
if (err != WSAEWOULDBLOCK) return err;
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
}
- return IO_UNKNOWN;
}
/*-------------------------------------------------------------------------*\
@@ -286,7 +274,6 @@ int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
if (err != WSAEWOULDBLOCK) return err;
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
}
- return IO_UNKNOWN;
}
/*-------------------------------------------------------------------------*\
@@ -346,8 +333,8 @@ const char *socket_strerror(int err) {
}
const char *socket_ioerror(p_socket ps, int err) {
- (void) ps;
- return socket_strerror(err);
+ (void) ps;
+ return socket_strerror(err);
}
static const char *wstrerror(int err) {
@@ -399,3 +386,28 @@ static const char *wstrerror(int err) {
default: return "Unknown error";
}
}
+
+const char *socket_gaistrerror(int err) {
+ if (err == 0) return NULL;
+ switch (err) {
+ case EAI_AGAIN: return "temporary failure in name resolution";
+ case EAI_BADFLAGS: return "invalid value for ai_flags";
+#ifdef EAI_BADHINTS
+ case EAI_BADHINTS: return "invalid value for hints";
+#endif
+ case EAI_FAIL: return "non-recoverable failure in name resolution";
+ case EAI_FAMILY: return "ai_family not supported";
+ case EAI_MEMORY: return "memory allocation failure";
+ case EAI_NONAME:
+ return "host or service not provided, or not known";
+// case EAI_OVERFLOW: return "argument buffer overflow";
+#ifdef EAI_PROTOCOL
+ case EAI_PROTOCOL: return "resolved protocol is unknown";
+#endif
+ case EAI_SERVICE: return "service not supported for socket type";
+ case EAI_SOCKTYPE: return "ai_socktype not supported";
+// case EAI_SYSTEM: return strerror(errno);
+ default: return gai_strerror(err);
+ }
+}
+