aboutsummaryrefslogtreecommitdiff
path: root/src/wsocket.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xsrc/wsocket.c49
1 files changed, 24 insertions, 25 deletions
diff --git a/src/wsocket.c b/src/wsocket.c
index c281058..20da330 100755
--- a/src/wsocket.c
+++ b/src/wsocket.c
@@ -18,7 +18,7 @@ static const char *wstrerror(int err);
18/*-------------------------------------------------------------------------*\ 18/*-------------------------------------------------------------------------*\
19* Initializes module 19* Initializes module
20\*-------------------------------------------------------------------------*/ 20\*-------------------------------------------------------------------------*/
21LUASOCKET_PRIVATE int socket_open(void) { 21int socket_open(void) {
22 WSADATA wsaData; 22 WSADATA wsaData;
23 WORD wVersionRequested = MAKEWORD(2, 0); 23 WORD wVersionRequested = MAKEWORD(2, 0);
24 int err = WSAStartup(wVersionRequested, &wsaData ); 24 int err = WSAStartup(wVersionRequested, &wsaData );
@@ -34,7 +34,7 @@ LUASOCKET_PRIVATE int socket_open(void) {
34/*-------------------------------------------------------------------------*\ 34/*-------------------------------------------------------------------------*\
35* Close module 35* Close module
36\*-------------------------------------------------------------------------*/ 36\*-------------------------------------------------------------------------*/
37LUASOCKET_PRIVATE int socket_close(void) { 37int socket_close(void) {
38 WSACleanup(); 38 WSACleanup();
39 return 1; 39 return 1;
40} 40}
@@ -47,7 +47,7 @@ LUASOCKET_PRIVATE int socket_close(void) {
47#define WAITFD_E 4 47#define WAITFD_E 4
48#define WAITFD_C (WAITFD_E|WAITFD_W) 48#define WAITFD_C (WAITFD_E|WAITFD_W)
49 49
50LUASOCKET_PRIVATE int socket_waitfd(p_socket ps, int sw, p_timeout tm) { 50int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
51 int ret; 51 int ret;
52 fd_set rfds, wfds, efds, *rp = NULL, *wp = NULL, *ep = NULL; 52 fd_set rfds, wfds, efds, *rp = NULL, *wp = NULL, *ep = NULL;
53 struct timeval tv, *tp = NULL; 53 struct timeval tv, *tp = NULL;
@@ -75,7 +75,7 @@ LUASOCKET_PRIVATE int socket_waitfd(p_socket ps, int sw, p_timeout tm) {
75/*-------------------------------------------------------------------------*\ 75/*-------------------------------------------------------------------------*\
76* Select with int timeout in ms 76* Select with int timeout in ms
77\*-------------------------------------------------------------------------*/ 77\*-------------------------------------------------------------------------*/
78LUASOCKET_PRIVATE int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds, 78int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds,
79 p_timeout tm) { 79 p_timeout tm) {
80 struct timeval tv; 80 struct timeval tv;
81 double t = timeout_get(tm); 81 double t = timeout_get(tm);
@@ -90,7 +90,7 @@ LUASOCKET_PRIVATE int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_s
90/*-------------------------------------------------------------------------*\ 90/*-------------------------------------------------------------------------*\
91* Close and inutilize socket 91* Close and inutilize socket
92\*-------------------------------------------------------------------------*/ 92\*-------------------------------------------------------------------------*/
93LUASOCKET_PRIVATE void socket_destroy(p_socket ps) { 93void socket_destroy(p_socket ps) {
94 if (*ps != SOCKET_INVALID) { 94 if (*ps != SOCKET_INVALID) {
95 socket_setblocking(ps); /* close can take a long time on WIN32 */ 95 socket_setblocking(ps); /* close can take a long time on WIN32 */
96 closesocket(*ps); 96 closesocket(*ps);
@@ -101,7 +101,7 @@ LUASOCKET_PRIVATE void socket_destroy(p_socket ps) {
101/*-------------------------------------------------------------------------*\ 101/*-------------------------------------------------------------------------*\
102* 102*
103\*-------------------------------------------------------------------------*/ 103\*-------------------------------------------------------------------------*/
104LUASOCKET_PRIVATE void socket_shutdown(p_socket ps, int how) { 104void socket_shutdown(p_socket ps, int how) {
105 socket_setblocking(ps); 105 socket_setblocking(ps);
106 shutdown(*ps, how); 106 shutdown(*ps, how);
107 socket_setnonblocking(ps); 107 socket_setnonblocking(ps);
@@ -110,7 +110,7 @@ LUASOCKET_PRIVATE void socket_shutdown(p_socket ps, int how) {
110/*-------------------------------------------------------------------------*\ 110/*-------------------------------------------------------------------------*\
111* Creates and sets up a socket 111* Creates and sets up a socket
112\*-------------------------------------------------------------------------*/ 112\*-------------------------------------------------------------------------*/
113LUASOCKET_PRIVATE int socket_create(p_socket ps, int domain, int type, int protocol) { 113int socket_create(p_socket ps, int domain, int type, int protocol) {
114 *ps = socket(domain, type, protocol); 114 *ps = socket(domain, type, protocol);
115 if (*ps != SOCKET_INVALID) return IO_DONE; 115 if (*ps != SOCKET_INVALID) return IO_DONE;
116 else return WSAGetLastError(); 116 else return WSAGetLastError();
@@ -119,7 +119,7 @@ LUASOCKET_PRIVATE int socket_create(p_socket ps, int domain, int type, int proto
119/*-------------------------------------------------------------------------*\ 119/*-------------------------------------------------------------------------*\
120* Connects or returns error message 120* Connects or returns error message
121\*-------------------------------------------------------------------------*/ 121\*-------------------------------------------------------------------------*/
122LUASOCKET_PRIVATE int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) { 122int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) {
123 int err; 123 int err;
124 /* don't call on closed socket */ 124 /* don't call on closed socket */
125 if (*ps == SOCKET_INVALID) return IO_CLOSED; 125 if (*ps == SOCKET_INVALID) return IO_CLOSED;
@@ -148,7 +148,7 @@ LUASOCKET_PRIVATE int socket_connect(p_socket ps, SA *addr, socklen_t len, p_tim
148/*-------------------------------------------------------------------------*\ 148/*-------------------------------------------------------------------------*\
149* Binds or returns error message 149* Binds or returns error message
150\*-------------------------------------------------------------------------*/ 150\*-------------------------------------------------------------------------*/
151LUASOCKET_PRIVATE int socket_bind(p_socket ps, SA *addr, socklen_t len) { 151int socket_bind(p_socket ps, SA *addr, socklen_t len) {
152 int err = IO_DONE; 152 int err = IO_DONE;
153 socket_setblocking(ps); 153 socket_setblocking(ps);
154 if (bind(*ps, addr, len) < 0) err = WSAGetLastError(); 154 if (bind(*ps, addr, len) < 0) err = WSAGetLastError();
@@ -159,7 +159,7 @@ LUASOCKET_PRIVATE int socket_bind(p_socket ps, SA *addr, socklen_t len) {
159/*-------------------------------------------------------------------------*\ 159/*-------------------------------------------------------------------------*\
160* 160*
161\*-------------------------------------------------------------------------*/ 161\*-------------------------------------------------------------------------*/
162LUASOCKET_PRIVATE int socket_listen(p_socket ps, int backlog) { 162int socket_listen(p_socket ps, int backlog) {
163 int err = IO_DONE; 163 int err = IO_DONE;
164 socket_setblocking(ps); 164 socket_setblocking(ps);
165 if (listen(*ps, backlog) < 0) err = WSAGetLastError(); 165 if (listen(*ps, backlog) < 0) err = WSAGetLastError();
@@ -170,7 +170,7 @@ LUASOCKET_PRIVATE int socket_listen(p_socket ps, int backlog) {
170/*-------------------------------------------------------------------------*\ 170/*-------------------------------------------------------------------------*\
171* Accept with timeout 171* Accept with timeout
172\*-------------------------------------------------------------------------*/ 172\*-------------------------------------------------------------------------*/
173LUASOCKET_PRIVATE int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, 173int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len,
174 p_timeout tm) { 174 p_timeout tm) {
175 if (*ps == SOCKET_INVALID) return IO_CLOSED; 175 if (*ps == SOCKET_INVALID) return IO_CLOSED;
176 for ( ;; ) { 176 for ( ;; ) {
@@ -192,7 +192,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. 192* 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. 193* Therefore, whoever calls this function should not pass a huge buffer.
194\*-------------------------------------------------------------------------*/ 194\*-------------------------------------------------------------------------*/
195LUASOCKET_PRIVATE int socket_send(p_socket ps, const char *data, size_t count, 195int socket_send(p_socket ps, const char *data, size_t count,
196 size_t *sent, p_timeout tm) 196 size_t *sent, p_timeout tm)
197{ 197{
198 int err; 198 int err;
@@ -220,7 +220,7 @@ LUASOCKET_PRIVATE int socket_send(p_socket ps, const char *data, size_t count,
220/*-------------------------------------------------------------------------*\ 220/*-------------------------------------------------------------------------*\
221* Sendto with timeout 221* Sendto with timeout
222\*-------------------------------------------------------------------------*/ 222\*-------------------------------------------------------------------------*/
223LUASOCKET_PRIVATE int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent, 223int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,
224 SA *addr, socklen_t len, p_timeout tm) 224 SA *addr, socklen_t len, p_timeout tm)
225{ 225{
226 int err; 226 int err;
@@ -241,7 +241,7 @@ LUASOCKET_PRIVATE int socket_sendto(p_socket ps, const char *data, size_t count,
241/*-------------------------------------------------------------------------*\ 241/*-------------------------------------------------------------------------*\
242* Receive with timeout 242* Receive with timeout
243\*-------------------------------------------------------------------------*/ 243\*-------------------------------------------------------------------------*/
244LUASOCKET_PRIVATE int socket_recv(p_socket ps, char *data, size_t count, size_t *got, 244int socket_recv(p_socket ps, char *data, size_t count, size_t *got,
245 p_timeout tm) 245 p_timeout tm)
246{ 246{
247 int err, prev = IO_DONE; 247 int err, prev = IO_DONE;
@@ -270,7 +270,7 @@ LUASOCKET_PRIVATE int socket_recv(p_socket ps, char *data, size_t count, size_t
270/*-------------------------------------------------------------------------*\ 270/*-------------------------------------------------------------------------*\
271* Recvfrom with timeout 271* Recvfrom with timeout
272\*-------------------------------------------------------------------------*/ 272\*-------------------------------------------------------------------------*/
273LUASOCKET_PRIVATE int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got, 273int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
274 SA *addr, socklen_t *len, p_timeout tm) 274 SA *addr, socklen_t *len, p_timeout tm)
275{ 275{
276 int err, prev = IO_DONE; 276 int err, prev = IO_DONE;
@@ -299,7 +299,7 @@ LUASOCKET_PRIVATE int socket_recvfrom(p_socket ps, char *data, size_t count, siz
299/*-------------------------------------------------------------------------*\ 299/*-------------------------------------------------------------------------*\
300* Put socket into blocking mode 300* Put socket into blocking mode
301\*-------------------------------------------------------------------------*/ 301\*-------------------------------------------------------------------------*/
302LUASOCKET_PRIVATE void socket_setblocking(p_socket ps) { 302void socket_setblocking(p_socket ps) {
303 u_long argp = 0; 303 u_long argp = 0;
304 ioctlsocket(*ps, FIONBIO, &argp); 304 ioctlsocket(*ps, FIONBIO, &argp);
305} 305}
@@ -307,7 +307,7 @@ LUASOCKET_PRIVATE void socket_setblocking(p_socket ps) {
307/*-------------------------------------------------------------------------*\ 307/*-------------------------------------------------------------------------*\
308* Put socket into non-blocking mode 308* Put socket into non-blocking mode
309\*-------------------------------------------------------------------------*/ 309\*-------------------------------------------------------------------------*/
310LUASOCKET_PRIVATE void socket_setnonblocking(p_socket ps) { 310void socket_setnonblocking(p_socket ps) {
311 u_long argp = 1; 311 u_long argp = 1;
312 ioctlsocket(*ps, FIONBIO, &argp); 312 ioctlsocket(*ps, FIONBIO, &argp);
313} 313}
@@ -315,13 +315,13 @@ LUASOCKET_PRIVATE void socket_setnonblocking(p_socket ps) {
315/*-------------------------------------------------------------------------*\ 315/*-------------------------------------------------------------------------*\
316* DNS helpers 316* DNS helpers
317\*-------------------------------------------------------------------------*/ 317\*-------------------------------------------------------------------------*/
318LUASOCKET_PRIVATE int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp) { 318int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp) {
319 *hp = gethostbyaddr(addr, len, AF_INET); 319 *hp = gethostbyaddr(addr, len, AF_INET);
320 if (*hp) return IO_DONE; 320 if (*hp) return IO_DONE;
321 else return WSAGetLastError(); 321 else return WSAGetLastError();
322} 322}
323 323
324LUASOCKET_PRIVATE int socket_gethostbyname(const char *addr, struct hostent **hp) { 324int socket_gethostbyname(const char *addr, struct hostent **hp) {
325 *hp = gethostbyname(addr); 325 *hp = gethostbyname(addr);
326 if (*hp) return IO_DONE; 326 if (*hp) return IO_DONE;
327 else return WSAGetLastError(); 327 else return WSAGetLastError();
@@ -330,7 +330,7 @@ LUASOCKET_PRIVATE int socket_gethostbyname(const char *addr, struct hostent **hp
330/*-------------------------------------------------------------------------*\ 330/*-------------------------------------------------------------------------*\
331* Error translation functions 331* Error translation functions
332\*-------------------------------------------------------------------------*/ 332\*-------------------------------------------------------------------------*/
333LUASOCKET_PRIVATE const char *socket_hoststrerror(int err) { 333const char *socket_hoststrerror(int err) {
334 if (err <= 0) return io_strerror(err); 334 if (err <= 0) return io_strerror(err);
335 switch (err) { 335 switch (err) {
336 case WSAHOST_NOT_FOUND: return PIE_HOST_NOT_FOUND; 336 case WSAHOST_NOT_FOUND: return PIE_HOST_NOT_FOUND;
@@ -338,7 +338,7 @@ LUASOCKET_PRIVATE const char *socket_hoststrerror(int err) {
338 } 338 }
339} 339}
340 340
341LUASOCKET_PRIVATE const char *socket_strerror(int err) { 341const char *socket_strerror(int err) {
342 if (err <= 0) return io_strerror(err); 342 if (err <= 0) return io_strerror(err);
343 switch (err) { 343 switch (err) {
344 case WSAEADDRINUSE: return PIE_ADDRINUSE; 344 case WSAEADDRINUSE: return PIE_ADDRINUSE;
@@ -352,12 +352,12 @@ LUASOCKET_PRIVATE const char *socket_strerror(int err) {
352 } 352 }
353} 353}
354 354
355LUASOCKET_PRIVATE const char *socket_ioerror(p_socket ps, int err) { 355const char *socket_ioerror(p_socket ps, int err) {
356 (void) ps; 356 (void) ps;
357 return socket_strerror(err); 357 return socket_strerror(err);
358} 358}
359 359
360LUASOCKET_PRIVATE static const char *wstrerror(int err) { 360static const char *wstrerror(int err) {
361 switch (err) { 361 switch (err) {
362 case WSAEINTR: return "Interrupted function call"; 362 case WSAEINTR: return "Interrupted function call";
363 case WSAEACCES: return PIE_ACCESS; // "Permission denied"; 363 case WSAEACCES: return PIE_ACCESS; // "Permission denied";
@@ -406,7 +406,7 @@ LUASOCKET_PRIVATE static const char *wstrerror(int err) {
406 } 406 }
407} 407}
408 408
409LUASOCKET_PRIVATE const char *socket_gaistrerror(int err) { 409const char *socket_gaistrerror(int err) {
410 if (err == 0) return NULL; 410 if (err == 0) return NULL;
411 switch (err) { 411 switch (err) {
412 case EAI_AGAIN: return PIE_AGAIN; 412 case EAI_AGAIN: return PIE_AGAIN;
@@ -432,4 +432,3 @@ LUASOCKET_PRIVATE const char *socket_gaistrerror(int err) {
432 default: return gai_strerror(err); 432 default: return gai_strerror(err);
433 } 433 }
434} 434}
435