aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorE. Westbrook <github@westbrook.io>2019-02-27 21:02:24 -0700
committerE. Westbrook <github@westbrook.io>2019-03-10 00:04:20 -0700
commit8b2dcdcf7d98194e9d501c0a76a048606761983f (patch)
tree4da7e822f306d33cceb7b0e398cc7c7403f3423d /src
parent4e363330a3b9e6ba082869f87820690e501f0a2d (diff)
downloadluasocket-8b2dcdcf7d98194e9d501c0a76a048606761983f.tar.gz
luasocket-8b2dcdcf7d98194e9d501c0a76a048606761983f.tar.bz2
luasocket-8b2dcdcf7d98194e9d501c0a76a048606761983f.zip
usocket: pragma visibility
Diffstat (limited to 'src')
-rw-r--r--src/usocket.c53
-rwxr-xr-xsrc/wsocket.c55
2 files changed, 57 insertions, 51 deletions
diff --git a/src/usocket.c b/src/usocket.c
index aee876d..acfe186 100644
--- a/src/usocket.c
+++ b/src/usocket.c
@@ -23,7 +23,7 @@
23#define WAITFD_R POLLIN 23#define WAITFD_R POLLIN
24#define WAITFD_W POLLOUT 24#define WAITFD_W POLLOUT
25#define WAITFD_C (POLLIN|POLLOUT) 25#define WAITFD_C (POLLIN|POLLOUT)
26LUASOCKET_PRIVATE int socket_waitfd(p_socket ps, int sw, p_timeout tm) { 26int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
27 int ret; 27 int ret;
28 struct pollfd pfd; 28 struct pollfd pfd;
29 pfd.fd = *ps; 29 pfd.fd = *ps;
@@ -45,7 +45,7 @@ LUASOCKET_PRIVATE int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
45#define WAITFD_W 2 45#define WAITFD_W 2
46#define WAITFD_C (WAITFD_R|WAITFD_W) 46#define WAITFD_C (WAITFD_R|WAITFD_W)
47 47
48LUASOCKET_PRIVATE int socket_waitfd(p_socket ps, int sw, p_timeout tm) { 48int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
49 int ret; 49 int ret;
50 fd_set rfds, wfds, *rp, *wp; 50 fd_set rfds, wfds, *rp, *wp;
51 struct timeval tv, *tp; 51 struct timeval tv, *tp;
@@ -77,7 +77,7 @@ LUASOCKET_PRIVATE int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
77/*-------------------------------------------------------------------------*\ 77/*-------------------------------------------------------------------------*\
78* Initializes module 78* Initializes module
79\*-------------------------------------------------------------------------*/ 79\*-------------------------------------------------------------------------*/
80LUASOCKET_PRIVATE int socket_open(void) { 80int socket_open(void) {
81 /* installs a handler to ignore sigpipe or it will crash us */ 81 /* installs a handler to ignore sigpipe or it will crash us */
82 signal(SIGPIPE, SIG_IGN); 82 signal(SIGPIPE, SIG_IGN);
83 return 1; 83 return 1;
@@ -86,14 +86,14 @@ LUASOCKET_PRIVATE int socket_open(void) {
86/*-------------------------------------------------------------------------*\ 86/*-------------------------------------------------------------------------*\
87* Close module 87* Close module
88\*-------------------------------------------------------------------------*/ 88\*-------------------------------------------------------------------------*/
89LUASOCKET_PRIVATE int socket_close(void) { 89int socket_close(void) {
90 return 1; 90 return 1;
91} 91}
92 92
93/*-------------------------------------------------------------------------*\ 93/*-------------------------------------------------------------------------*\
94* Close and inutilize socket 94* Close and inutilize socket
95\*-------------------------------------------------------------------------*/ 95\*-------------------------------------------------------------------------*/
96LUASOCKET_PRIVATE void socket_destroy(p_socket ps) { 96void socket_destroy(p_socket ps) {
97 if (*ps != SOCKET_INVALID) { 97 if (*ps != SOCKET_INVALID) {
98 close(*ps); 98 close(*ps);
99 *ps = SOCKET_INVALID; 99 *ps = SOCKET_INVALID;
@@ -103,7 +103,7 @@ LUASOCKET_PRIVATE void socket_destroy(p_socket ps) {
103/*-------------------------------------------------------------------------*\ 103/*-------------------------------------------------------------------------*\
104* Select with timeout control 104* Select with timeout control
105\*-------------------------------------------------------------------------*/ 105\*-------------------------------------------------------------------------*/
106LUASOCKET_PRIVATE int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds, 106int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds,
107 p_timeout tm) { 107 p_timeout tm) {
108 int ret; 108 int ret;
109 do { 109 do {
@@ -120,7 +120,7 @@ LUASOCKET_PRIVATE int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_s
120/*-------------------------------------------------------------------------*\ 120/*-------------------------------------------------------------------------*\
121* Creates and sets up a socket 121* Creates and sets up a socket
122\*-------------------------------------------------------------------------*/ 122\*-------------------------------------------------------------------------*/
123LUASOCKET_PRIVATE int socket_create(p_socket ps, int domain, int type, int protocol) { 123int socket_create(p_socket ps, int domain, int type, int protocol) {
124 *ps = socket(domain, type, protocol); 124 *ps = socket(domain, type, protocol);
125 if (*ps != SOCKET_INVALID) return IO_DONE; 125 if (*ps != SOCKET_INVALID) return IO_DONE;
126 else return errno; 126 else return errno;
@@ -129,7 +129,7 @@ LUASOCKET_PRIVATE int socket_create(p_socket ps, int domain, int type, int proto
129/*-------------------------------------------------------------------------*\ 129/*-------------------------------------------------------------------------*\
130* Binds or returns error message 130* Binds or returns error message
131\*-------------------------------------------------------------------------*/ 131\*-------------------------------------------------------------------------*/
132LUASOCKET_PRIVATE int socket_bind(p_socket ps, SA *addr, socklen_t len) { 132int socket_bind(p_socket ps, SA *addr, socklen_t len) {
133 int err = IO_DONE; 133 int err = IO_DONE;
134 socket_setblocking(ps); 134 socket_setblocking(ps);
135 if (bind(*ps, addr, len) < 0) err = errno; 135 if (bind(*ps, addr, len) < 0) err = errno;
@@ -140,7 +140,7 @@ LUASOCKET_PRIVATE int socket_bind(p_socket ps, SA *addr, socklen_t len) {
140/*-------------------------------------------------------------------------*\ 140/*-------------------------------------------------------------------------*\
141* 141*
142\*-------------------------------------------------------------------------*/ 142\*-------------------------------------------------------------------------*/
143LUASOCKET_PRIVATE int socket_listen(p_socket ps, int backlog) { 143int socket_listen(p_socket ps, int backlog) {
144 int err = IO_DONE; 144 int err = IO_DONE;
145 if (listen(*ps, backlog)) err = errno; 145 if (listen(*ps, backlog)) err = errno;
146 return err; 146 return err;
@@ -149,14 +149,14 @@ LUASOCKET_PRIVATE int socket_listen(p_socket ps, int backlog) {
149/*-------------------------------------------------------------------------*\ 149/*-------------------------------------------------------------------------*\
150* 150*
151\*-------------------------------------------------------------------------*/ 151\*-------------------------------------------------------------------------*/
152LUASOCKET_PRIVATE void socket_shutdown(p_socket ps, int how) { 152void socket_shutdown(p_socket ps, int how) {
153 shutdown(*ps, how); 153 shutdown(*ps, how);
154} 154}
155 155
156/*-------------------------------------------------------------------------*\ 156/*-------------------------------------------------------------------------*\
157* Connects or returns error message 157* Connects or returns error message
158\*-------------------------------------------------------------------------*/ 158\*-------------------------------------------------------------------------*/
159LUASOCKET_PRIVATE int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) { 159int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) {
160 int err; 160 int err;
161 /* avoid calling on closed sockets */ 161 /* avoid calling on closed sockets */
162 if (*ps == SOCKET_INVALID) return IO_CLOSED; 162 if (*ps == SOCKET_INVALID) return IO_CLOSED;
@@ -178,7 +178,7 @@ LUASOCKET_PRIVATE int socket_connect(p_socket ps, SA *addr, socklen_t len, p_tim
178/*-------------------------------------------------------------------------*\ 178/*-------------------------------------------------------------------------*\
179* Accept with timeout 179* Accept with timeout
180\*-------------------------------------------------------------------------*/ 180\*-------------------------------------------------------------------------*/
181LUASOCKET_PRIVATE int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, p_timeout tm) { 181int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, p_timeout tm) {
182 if (*ps == SOCKET_INVALID) return IO_CLOSED; 182 if (*ps == SOCKET_INVALID) return IO_CLOSED;
183 for ( ;; ) { 183 for ( ;; ) {
184 int err; 184 int err;
@@ -195,7 +195,7 @@ LUASOCKET_PRIVATE int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_
195/*-------------------------------------------------------------------------*\ 195/*-------------------------------------------------------------------------*\
196* Send with timeout 196* Send with timeout
197\*-------------------------------------------------------------------------*/ 197\*-------------------------------------------------------------------------*/
198LUASOCKET_PRIVATE int socket_send(p_socket ps, const char *data, size_t count, 198int socket_send(p_socket ps, const char *data, size_t count,
199 size_t *sent, p_timeout tm) 199 size_t *sent, p_timeout tm)
200{ 200{
201 int err; 201 int err;
@@ -229,7 +229,7 @@ LUASOCKET_PRIVATE int socket_send(p_socket ps, const char *data, size_t count,
229/*-------------------------------------------------------------------------*\ 229/*-------------------------------------------------------------------------*\
230* Sendto with timeout 230* Sendto with timeout
231\*-------------------------------------------------------------------------*/ 231\*-------------------------------------------------------------------------*/
232LUASOCKET_PRIVATE int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent, 232int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,
233 SA *addr, socklen_t len, p_timeout tm) 233 SA *addr, socklen_t len, p_timeout tm)
234{ 234{
235 int err; 235 int err;
@@ -254,7 +254,7 @@ LUASOCKET_PRIVATE int socket_sendto(p_socket ps, const char *data, size_t count,
254/*-------------------------------------------------------------------------*\ 254/*-------------------------------------------------------------------------*\
255* Receive with timeout 255* Receive with timeout
256\*-------------------------------------------------------------------------*/ 256\*-------------------------------------------------------------------------*/
257LUASOCKET_PRIVATE int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm) { 257int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm) {
258 int err; 258 int err;
259 *got = 0; 259 *got = 0;
260 if (*ps == SOCKET_INVALID) return IO_CLOSED; 260 if (*ps == SOCKET_INVALID) return IO_CLOSED;
@@ -276,7 +276,7 @@ LUASOCKET_PRIVATE int socket_recv(p_socket ps, char *data, size_t count, size_t
276/*-------------------------------------------------------------------------*\ 276/*-------------------------------------------------------------------------*\
277* Recvfrom with timeout 277* Recvfrom with timeout
278\*-------------------------------------------------------------------------*/ 278\*-------------------------------------------------------------------------*/
279LUASOCKET_PRIVATE int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got, 279int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
280 SA *addr, socklen_t *len, p_timeout tm) { 280 SA *addr, socklen_t *len, p_timeout tm) {
281 int err; 281 int err;
282 *got = 0; 282 *got = 0;
@@ -304,7 +304,7 @@ LUASOCKET_PRIVATE int socket_recvfrom(p_socket ps, char *data, size_t count, siz
304* with send/recv replaced with write/read. We can't just use write/read 304* with send/recv replaced with write/read. We can't just use write/read
305* in the socket version, because behaviour when size is zero is different. 305* in the socket version, because behaviour when size is zero is different.
306\*-------------------------------------------------------------------------*/ 306\*-------------------------------------------------------------------------*/
307LUASOCKET_PRIVATE int socket_write(p_socket ps, const char *data, size_t count, 307int socket_write(p_socket ps, const char *data, size_t count,
308 size_t *sent, p_timeout tm) 308 size_t *sent, p_timeout tm)
309{ 309{
310 int err; 310 int err;
@@ -339,7 +339,7 @@ LUASOCKET_PRIVATE int socket_write(p_socket ps, const char *data, size_t count,
339* Read with timeout 339* Read with timeout
340* See note for socket_write 340* See note for socket_write
341\*-------------------------------------------------------------------------*/ 341\*-------------------------------------------------------------------------*/
342LUASOCKET_PRIVATE int socket_read(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm) { 342int socket_read(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm) {
343 int err; 343 int err;
344 *got = 0; 344 *got = 0;
345 if (*ps == SOCKET_INVALID) return IO_CLOSED; 345 if (*ps == SOCKET_INVALID) return IO_CLOSED;
@@ -361,7 +361,7 @@ LUASOCKET_PRIVATE int socket_read(p_socket ps, char *data, size_t count, size_t
361/*-------------------------------------------------------------------------*\ 361/*-------------------------------------------------------------------------*\
362* Put socket into blocking mode 362* Put socket into blocking mode
363\*-------------------------------------------------------------------------*/ 363\*-------------------------------------------------------------------------*/
364LUASOCKET_PRIVATE void socket_setblocking(p_socket ps) { 364void socket_setblocking(p_socket ps) {
365 int flags = fcntl(*ps, F_GETFL, 0); 365 int flags = fcntl(*ps, F_GETFL, 0);
366 flags &= (~(O_NONBLOCK)); 366 flags &= (~(O_NONBLOCK));
367 fcntl(*ps, F_SETFL, flags); 367 fcntl(*ps, F_SETFL, flags);
@@ -370,7 +370,7 @@ LUASOCKET_PRIVATE void socket_setblocking(p_socket ps) {
370/*-------------------------------------------------------------------------*\ 370/*-------------------------------------------------------------------------*\
371* Put socket into non-blocking mode 371* Put socket into non-blocking mode
372\*-------------------------------------------------------------------------*/ 372\*-------------------------------------------------------------------------*/
373LUASOCKET_PRIVATE void socket_setnonblocking(p_socket ps) { 373void socket_setnonblocking(p_socket ps) {
374 int flags = fcntl(*ps, F_GETFL, 0); 374 int flags = fcntl(*ps, F_GETFL, 0);
375 flags |= O_NONBLOCK; 375 flags |= O_NONBLOCK;
376 fcntl(*ps, F_SETFL, flags); 376 fcntl(*ps, F_SETFL, flags);
@@ -379,7 +379,7 @@ LUASOCKET_PRIVATE void socket_setnonblocking(p_socket ps) {
379/*-------------------------------------------------------------------------*\ 379/*-------------------------------------------------------------------------*\
380* DNS helpers 380* DNS helpers
381\*-------------------------------------------------------------------------*/ 381\*-------------------------------------------------------------------------*/
382LUASOCKET_PRIVATE int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp) { 382int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp) {
383 *hp = gethostbyaddr(addr, len, AF_INET); 383 *hp = gethostbyaddr(addr, len, AF_INET);
384 if (*hp) return IO_DONE; 384 if (*hp) return IO_DONE;
385 else if (h_errno) return h_errno; 385 else if (h_errno) return h_errno;
@@ -387,7 +387,7 @@ LUASOCKET_PRIVATE int socket_gethostbyaddr(const char *addr, socklen_t len, stru
387 else return IO_UNKNOWN; 387 else return IO_UNKNOWN;
388} 388}
389 389
390LUASOCKET_PRIVATE int socket_gethostbyname(const char *addr, struct hostent **hp) { 390int socket_gethostbyname(const char *addr, struct hostent **hp) {
391 *hp = gethostbyname(addr); 391 *hp = gethostbyname(addr);
392 if (*hp) return IO_DONE; 392 if (*hp) return IO_DONE;
393 else if (h_errno) return h_errno; 393 else if (h_errno) return h_errno;
@@ -399,7 +399,7 @@ LUASOCKET_PRIVATE int socket_gethostbyname(const char *addr, struct hostent **hp
399* Error translation functions 399* Error translation functions
400* Make sure important error messages are standard 400* Make sure important error messages are standard
401\*-------------------------------------------------------------------------*/ 401\*-------------------------------------------------------------------------*/
402LUASOCKET_PRIVATE const char *socket_hoststrerror(int err) { 402const char *socket_hoststrerror(int err) {
403 if (err <= 0) return io_strerror(err); 403 if (err <= 0) return io_strerror(err);
404 switch (err) { 404 switch (err) {
405 case HOST_NOT_FOUND: return PIE_HOST_NOT_FOUND; 405 case HOST_NOT_FOUND: return PIE_HOST_NOT_FOUND;
@@ -407,7 +407,7 @@ LUASOCKET_PRIVATE const char *socket_hoststrerror(int err) {
407 } 407 }
408} 408}
409 409
410LUASOCKET_PRIVATE const char *socket_strerror(int err) { 410const char *socket_strerror(int err) {
411 if (err <= 0) return io_strerror(err); 411 if (err <= 0) return io_strerror(err);
412 switch (err) { 412 switch (err) {
413 case EADDRINUSE: return PIE_ADDRINUSE; 413 case EADDRINUSE: return PIE_ADDRINUSE;
@@ -423,12 +423,12 @@ LUASOCKET_PRIVATE const char *socket_strerror(int err) {
423 } 423 }
424} 424}
425 425
426LUASOCKET_PRIVATE const char *socket_ioerror(p_socket ps, int err) { 426const char *socket_ioerror(p_socket ps, int err) {
427 (void) ps; 427 (void) ps;
428 return socket_strerror(err); 428 return socket_strerror(err);
429} 429}
430 430
431LUASOCKET_PRIVATE const char *socket_gaistrerror(int err) { 431const char *socket_gaistrerror(int err) {
432 if (err == 0) return NULL; 432 if (err == 0) return NULL;
433 switch (err) { 433 switch (err) {
434 case EAI_AGAIN: return PIE_AGAIN; 434 case EAI_AGAIN: return PIE_AGAIN;
@@ -452,4 +452,3 @@ LUASOCKET_PRIVATE const char *socket_gaistrerror(int err) {
452 default: return gai_strerror(err); 452 default: return gai_strerror(err);
453 } 453 }
454} 454}
455
diff --git a/src/wsocket.c b/src/wsocket.c
index c281058..1da984c 100755
--- a/src/wsocket.c
+++ b/src/wsocket.c
@@ -12,13 +12,17 @@
12#include "socket.h" 12#include "socket.h"
13#include "pierror.h" 13#include "pierror.h"
14 14
15#ifndef _WIN32
16#pragma GCC visibility push(hidden)
17#endif
18
15/* WinSock doesn't have a strerror... */ 19/* WinSock doesn't have a strerror... */
16static const char *wstrerror(int err); 20static const char *wstrerror(int err);
17 21
18/*-------------------------------------------------------------------------*\ 22/*-------------------------------------------------------------------------*\
19* Initializes module 23* Initializes module
20\*-------------------------------------------------------------------------*/ 24\*-------------------------------------------------------------------------*/
21LUASOCKET_PRIVATE int socket_open(void) { 25int socket_open(void) {
22 WSADATA wsaData; 26 WSADATA wsaData;
23 WORD wVersionRequested = MAKEWORD(2, 0); 27 WORD wVersionRequested = MAKEWORD(2, 0);
24 int err = WSAStartup(wVersionRequested, &wsaData ); 28 int err = WSAStartup(wVersionRequested, &wsaData );
@@ -34,7 +38,7 @@ LUASOCKET_PRIVATE int socket_open(void) {
34/*-------------------------------------------------------------------------*\ 38/*-------------------------------------------------------------------------*\
35* Close module 39* Close module
36\*-------------------------------------------------------------------------*/ 40\*-------------------------------------------------------------------------*/
37LUASOCKET_PRIVATE int socket_close(void) { 41int socket_close(void) {
38 WSACleanup(); 42 WSACleanup();
39 return 1; 43 return 1;
40} 44}
@@ -47,7 +51,7 @@ LUASOCKET_PRIVATE int socket_close(void) {
47#define WAITFD_E 4 51#define WAITFD_E 4
48#define WAITFD_C (WAITFD_E|WAITFD_W) 52#define WAITFD_C (WAITFD_E|WAITFD_W)
49 53
50LUASOCKET_PRIVATE int socket_waitfd(p_socket ps, int sw, p_timeout tm) { 54int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
51 int ret; 55 int ret;
52 fd_set rfds, wfds, efds, *rp = NULL, *wp = NULL, *ep = NULL; 56 fd_set rfds, wfds, efds, *rp = NULL, *wp = NULL, *ep = NULL;
53 struct timeval tv, *tp = NULL; 57 struct timeval tv, *tp = NULL;
@@ -75,7 +79,7 @@ LUASOCKET_PRIVATE int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
75/*-------------------------------------------------------------------------*\ 79/*-------------------------------------------------------------------------*\
76* Select with int timeout in ms 80* Select with int timeout in ms
77\*-------------------------------------------------------------------------*/ 81\*-------------------------------------------------------------------------*/
78LUASOCKET_PRIVATE int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds, 82int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds,
79 p_timeout tm) { 83 p_timeout tm) {
80 struct timeval tv; 84 struct timeval tv;
81 double t = timeout_get(tm); 85 double t = timeout_get(tm);
@@ -90,7 +94,7 @@ LUASOCKET_PRIVATE int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_s
90/*-------------------------------------------------------------------------*\ 94/*-------------------------------------------------------------------------*\
91* Close and inutilize socket 95* Close and inutilize socket
92\*-------------------------------------------------------------------------*/ 96\*-------------------------------------------------------------------------*/
93LUASOCKET_PRIVATE void socket_destroy(p_socket ps) { 97void socket_destroy(p_socket ps) {
94 if (*ps != SOCKET_INVALID) { 98 if (*ps != SOCKET_INVALID) {
95 socket_setblocking(ps); /* close can take a long time on WIN32 */ 99 socket_setblocking(ps); /* close can take a long time on WIN32 */
96 closesocket(*ps); 100 closesocket(*ps);
@@ -101,7 +105,7 @@ LUASOCKET_PRIVATE void socket_destroy(p_socket ps) {
101/*-------------------------------------------------------------------------*\ 105/*-------------------------------------------------------------------------*\
102* 106*
103\*-------------------------------------------------------------------------*/ 107\*-------------------------------------------------------------------------*/
104LUASOCKET_PRIVATE void socket_shutdown(p_socket ps, int how) { 108void socket_shutdown(p_socket ps, int how) {
105 socket_setblocking(ps); 109 socket_setblocking(ps);
106 shutdown(*ps, how); 110 shutdown(*ps, how);
107 socket_setnonblocking(ps); 111 socket_setnonblocking(ps);
@@ -110,7 +114,7 @@ LUASOCKET_PRIVATE void socket_shutdown(p_socket ps, int how) {
110/*-------------------------------------------------------------------------*\ 114/*-------------------------------------------------------------------------*\
111* Creates and sets up a socket 115* Creates and sets up a socket
112\*-------------------------------------------------------------------------*/ 116\*-------------------------------------------------------------------------*/
113LUASOCKET_PRIVATE int socket_create(p_socket ps, int domain, int type, int protocol) { 117int socket_create(p_socket ps, int domain, int type, int protocol) {
114 *ps = socket(domain, type, protocol); 118 *ps = socket(domain, type, protocol);
115 if (*ps != SOCKET_INVALID) return IO_DONE; 119 if (*ps != SOCKET_INVALID) return IO_DONE;
116 else return WSAGetLastError(); 120 else return WSAGetLastError();
@@ -119,7 +123,7 @@ LUASOCKET_PRIVATE int socket_create(p_socket ps, int domain, int type, int proto
119/*-------------------------------------------------------------------------*\ 123/*-------------------------------------------------------------------------*\
120* Connects or returns error message 124* Connects or returns error message
121\*-------------------------------------------------------------------------*/ 125\*-------------------------------------------------------------------------*/
122LUASOCKET_PRIVATE int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) { 126int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) {
123 int err; 127 int err;
124 /* don't call on closed socket */ 128 /* don't call on closed socket */
125 if (*ps == SOCKET_INVALID) return IO_CLOSED; 129 if (*ps == SOCKET_INVALID) return IO_CLOSED;
@@ -148,7 +152,7 @@ LUASOCKET_PRIVATE int socket_connect(p_socket ps, SA *addr, socklen_t len, p_tim
148/*-------------------------------------------------------------------------*\ 152/*-------------------------------------------------------------------------*\
149* Binds or returns error message 153* Binds or returns error message
150\*-------------------------------------------------------------------------*/ 154\*-------------------------------------------------------------------------*/
151LUASOCKET_PRIVATE int socket_bind(p_socket ps, SA *addr, socklen_t len) { 155int socket_bind(p_socket ps, SA *addr, socklen_t len) {
152 int err = IO_DONE; 156 int err = IO_DONE;
153 socket_setblocking(ps); 157 socket_setblocking(ps);
154 if (bind(*ps, addr, len) < 0) err = WSAGetLastError(); 158 if (bind(*ps, addr, len) < 0) err = WSAGetLastError();
@@ -159,7 +163,7 @@ LUASOCKET_PRIVATE int socket_bind(p_socket ps, SA *addr, socklen_t len) {
159/*-------------------------------------------------------------------------*\ 163/*-------------------------------------------------------------------------*\
160* 164*
161\*-------------------------------------------------------------------------*/ 165\*-------------------------------------------------------------------------*/
162LUASOCKET_PRIVATE int socket_listen(p_socket ps, int backlog) { 166int socket_listen(p_socket ps, int backlog) {
163 int err = IO_DONE; 167 int err = IO_DONE;
164 socket_setblocking(ps); 168 socket_setblocking(ps);
165 if (listen(*ps, backlog) < 0) err = WSAGetLastError(); 169 if (listen(*ps, backlog) < 0) err = WSAGetLastError();
@@ -170,7 +174,7 @@ LUASOCKET_PRIVATE int socket_listen(p_socket ps, int backlog) {
170/*-------------------------------------------------------------------------*\ 174/*-------------------------------------------------------------------------*\
171* Accept with timeout 175* Accept with timeout
172\*-------------------------------------------------------------------------*/ 176\*-------------------------------------------------------------------------*/
173LUASOCKET_PRIVATE int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, 177int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len,
174 p_timeout tm) { 178 p_timeout tm) {
175 if (*ps == SOCKET_INVALID) return IO_CLOSED; 179 if (*ps == SOCKET_INVALID) return IO_CLOSED;
176 for ( ;; ) { 180 for ( ;; ) {
@@ -192,7 +196,7 @@ LUASOCKET_PRIVATE int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_
192* this can take an awful lot of time and we will end up blocked. 196* this can take an awful lot of time and we will end up blocked.
193* Therefore, whoever calls this function should not pass a huge buffer. 197* Therefore, whoever calls this function should not pass a huge buffer.
194\*-------------------------------------------------------------------------*/ 198\*-------------------------------------------------------------------------*/
195LUASOCKET_PRIVATE int socket_send(p_socket ps, const char *data, size_t count, 199int socket_send(p_socket ps, const char *data, size_t count,
196 size_t *sent, p_timeout tm) 200 size_t *sent, p_timeout tm)
197{ 201{
198 int err; 202 int err;
@@ -220,7 +224,7 @@ LUASOCKET_PRIVATE int socket_send(p_socket ps, const char *data, size_t count,
220/*-------------------------------------------------------------------------*\ 224/*-------------------------------------------------------------------------*\
221* Sendto with timeout 225* Sendto with timeout
222\*-------------------------------------------------------------------------*/ 226\*-------------------------------------------------------------------------*/
223LUASOCKET_PRIVATE int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent, 227int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,
224 SA *addr, socklen_t len, p_timeout tm) 228 SA *addr, socklen_t len, p_timeout tm)
225{ 229{
226 int err; 230 int err;
@@ -241,7 +245,7 @@ LUASOCKET_PRIVATE int socket_sendto(p_socket ps, const char *data, size_t count,
241/*-------------------------------------------------------------------------*\ 245/*-------------------------------------------------------------------------*\
242* Receive with timeout 246* Receive with timeout
243\*-------------------------------------------------------------------------*/ 247\*-------------------------------------------------------------------------*/
244LUASOCKET_PRIVATE int socket_recv(p_socket ps, char *data, size_t count, size_t *got, 248int socket_recv(p_socket ps, char *data, size_t count, size_t *got,
245 p_timeout tm) 249 p_timeout tm)
246{ 250{
247 int err, prev = IO_DONE; 251 int err, prev = IO_DONE;
@@ -270,7 +274,7 @@ LUASOCKET_PRIVATE int socket_recv(p_socket ps, char *data, size_t count, size_t
270/*-------------------------------------------------------------------------*\ 274/*-------------------------------------------------------------------------*\
271* Recvfrom with timeout 275* Recvfrom with timeout
272\*-------------------------------------------------------------------------*/ 276\*-------------------------------------------------------------------------*/
273LUASOCKET_PRIVATE int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got, 277int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
274 SA *addr, socklen_t *len, p_timeout tm) 278 SA *addr, socklen_t *len, p_timeout tm)
275{ 279{
276 int err, prev = IO_DONE; 280 int err, prev = IO_DONE;
@@ -299,7 +303,7 @@ LUASOCKET_PRIVATE int socket_recvfrom(p_socket ps, char *data, size_t count, siz
299/*-------------------------------------------------------------------------*\ 303/*-------------------------------------------------------------------------*\
300* Put socket into blocking mode 304* Put socket into blocking mode
301\*-------------------------------------------------------------------------*/ 305\*-------------------------------------------------------------------------*/
302LUASOCKET_PRIVATE void socket_setblocking(p_socket ps) { 306void socket_setblocking(p_socket ps) {
303 u_long argp = 0; 307 u_long argp = 0;
304 ioctlsocket(*ps, FIONBIO, &argp); 308 ioctlsocket(*ps, FIONBIO, &argp);
305} 309}
@@ -307,7 +311,7 @@ LUASOCKET_PRIVATE void socket_setblocking(p_socket ps) {
307/*-------------------------------------------------------------------------*\ 311/*-------------------------------------------------------------------------*\
308* Put socket into non-blocking mode 312* Put socket into non-blocking mode
309\*-------------------------------------------------------------------------*/ 313\*-------------------------------------------------------------------------*/
310LUASOCKET_PRIVATE void socket_setnonblocking(p_socket ps) { 314void socket_setnonblocking(p_socket ps) {
311 u_long argp = 1; 315 u_long argp = 1;
312 ioctlsocket(*ps, FIONBIO, &argp); 316 ioctlsocket(*ps, FIONBIO, &argp);
313} 317}
@@ -315,13 +319,13 @@ LUASOCKET_PRIVATE void socket_setnonblocking(p_socket ps) {
315/*-------------------------------------------------------------------------*\ 319/*-------------------------------------------------------------------------*\
316* DNS helpers 320* DNS helpers
317\*-------------------------------------------------------------------------*/ 321\*-------------------------------------------------------------------------*/
318LUASOCKET_PRIVATE int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp) { 322int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp) {
319 *hp = gethostbyaddr(addr, len, AF_INET); 323 *hp = gethostbyaddr(addr, len, AF_INET);
320 if (*hp) return IO_DONE; 324 if (*hp) return IO_DONE;
321 else return WSAGetLastError(); 325 else return WSAGetLastError();
322} 326}
323 327
324LUASOCKET_PRIVATE int socket_gethostbyname(const char *addr, struct hostent **hp) { 328int socket_gethostbyname(const char *addr, struct hostent **hp) {
325 *hp = gethostbyname(addr); 329 *hp = gethostbyname(addr);
326 if (*hp) return IO_DONE; 330 if (*hp) return IO_DONE;
327 else return WSAGetLastError(); 331 else return WSAGetLastError();
@@ -330,7 +334,7 @@ LUASOCKET_PRIVATE int socket_gethostbyname(const char *addr, struct hostent **hp
330/*-------------------------------------------------------------------------*\ 334/*-------------------------------------------------------------------------*\
331* Error translation functions 335* Error translation functions
332\*-------------------------------------------------------------------------*/ 336\*-------------------------------------------------------------------------*/
333LUASOCKET_PRIVATE const char *socket_hoststrerror(int err) { 337const char *socket_hoststrerror(int err) {
334 if (err <= 0) return io_strerror(err); 338 if (err <= 0) return io_strerror(err);
335 switch (err) { 339 switch (err) {
336 case WSAHOST_NOT_FOUND: return PIE_HOST_NOT_FOUND; 340 case WSAHOST_NOT_FOUND: return PIE_HOST_NOT_FOUND;
@@ -338,7 +342,7 @@ LUASOCKET_PRIVATE const char *socket_hoststrerror(int err) {
338 } 342 }
339} 343}
340 344
341LUASOCKET_PRIVATE const char *socket_strerror(int err) { 345const char *socket_strerror(int err) {
342 if (err <= 0) return io_strerror(err); 346 if (err <= 0) return io_strerror(err);
343 switch (err) { 347 switch (err) {
344 case WSAEADDRINUSE: return PIE_ADDRINUSE; 348 case WSAEADDRINUSE: return PIE_ADDRINUSE;
@@ -352,12 +356,12 @@ LUASOCKET_PRIVATE const char *socket_strerror(int err) {
352 } 356 }
353} 357}
354 358
355LUASOCKET_PRIVATE const char *socket_ioerror(p_socket ps, int err) { 359const char *socket_ioerror(p_socket ps, int err) {
356 (void) ps; 360 (void) ps;
357 return socket_strerror(err); 361 return socket_strerror(err);
358} 362}
359 363
360LUASOCKET_PRIVATE static const char *wstrerror(int err) { 364static const char *wstrerror(int err) {
361 switch (err) { 365 switch (err) {
362 case WSAEINTR: return "Interrupted function call"; 366 case WSAEINTR: return "Interrupted function call";
363 case WSAEACCES: return PIE_ACCESS; // "Permission denied"; 367 case WSAEACCES: return PIE_ACCESS; // "Permission denied";
@@ -406,7 +410,7 @@ LUASOCKET_PRIVATE static const char *wstrerror(int err) {
406 } 410 }
407} 411}
408 412
409LUASOCKET_PRIVATE const char *socket_gaistrerror(int err) { 413const char *socket_gaistrerror(int err) {
410 if (err == 0) return NULL; 414 if (err == 0) return NULL;
411 switch (err) { 415 switch (err) {
412 case EAI_AGAIN: return PIE_AGAIN; 416 case EAI_AGAIN: return PIE_AGAIN;
@@ -433,3 +437,6 @@ LUASOCKET_PRIVATE const char *socket_gaistrerror(int err) {
433 } 437 }
434} 438}
435 439
440#ifndef _WIN32
441#pragma GCC visibility pop
442#endif