diff options
author | Diego Nehab <diego@impa.br> | 2012-12-11 16:35:27 -0200 |
---|---|---|
committer | Diego Nehab <diego@impa.br> | 2012-12-11 16:35:27 -0200 |
commit | 618ce43ee3950b80aca1fde0a5b12e6e13627f1b (patch) | |
tree | fc97079e13e071593086a3d6aa5b090b96c744a3 /src | |
parent | 66670c354146feb8c9603f10682fabcba44a05a9 (diff) | |
download | luasocket-618ce43ee3950b80aca1fde0a5b12e6e13627f1b.tar.gz luasocket-618ce43ee3950b80aca1fde0a5b12e6e13627f1b.tar.bz2 luasocket-618ce43ee3950b80aca1fde0a5b12e6e13627f1b.zip |
Fix socket_accept usage to depend on family.
Diffstat (limited to 'src')
-rw-r--r-- | src/inet.c | 16 | ||||
-rw-r--r-- | src/inet.h | 1 | ||||
-rw-r--r-- | src/makefile | 2 | ||||
-rw-r--r-- | src/tcp.c | 6 | ||||
-rw-r--r-- | src/usocket.c | 4 | ||||
-rw-r--r-- | src/usocket.h | 1 | ||||
-rw-r--r-- | src/wsocket.c | 4 | ||||
-rw-r--r-- | src/wsocket.h | 1 |
8 files changed, 22 insertions, 13 deletions
@@ -263,7 +263,6 @@ int inet_meth_getpeername(lua_State *L, p_socket ps, int family) | |||
263 | lua_pushliteral(L, "inet6"); | 263 | lua_pushliteral(L, "inet6"); |
264 | return 3; | 264 | return 3; |
265 | } | 265 | } |
266 | return 2; | ||
267 | } | 266 | } |
268 | default: | 267 | default: |
269 | lua_pushnil(L); | 268 | lua_pushnil(L); |
@@ -424,6 +423,21 @@ const char *inet_tryconnect(p_socket ps, const char *address, | |||
424 | } | 423 | } |
425 | 424 | ||
426 | /*-------------------------------------------------------------------------*\ | 425 | /*-------------------------------------------------------------------------*\ |
426 | * Tries to accept a socket | ||
427 | \*-------------------------------------------------------------------------*/ | ||
428 | const char *inet_tryaccept(p_socket server, int family, p_socket client, p_timeout tm) | ||
429 | { | ||
430 | socklen_t len; | ||
431 | t_sockaddr_storage addr; | ||
432 | if (family == PF_INET6) { | ||
433 | len = sizeof(struct sockaddr_in6); | ||
434 | } else { | ||
435 | len = sizeof(struct sockaddr_in); | ||
436 | } | ||
437 | return socket_strerror(socket_accept(server, client, (SA *) &addr, &len, tm)); | ||
438 | } | ||
439 | |||
440 | /*-------------------------------------------------------------------------*\ | ||
427 | * Tries to bind socket to (address, port) | 441 | * Tries to bind socket to (address, port) |
428 | \*-------------------------------------------------------------------------*/ | 442 | \*-------------------------------------------------------------------------*/ |
429 | const char *inet_trybind(p_socket ps, const char *address, const char *serv, | 443 | const char *inet_trybind(p_socket ps, const char *address, const char *serv, |
@@ -30,6 +30,7 @@ const char *inet_tryconnect(p_socket ps, const char *address, | |||
30 | const char *inet_trybind(p_socket ps, const char *address, const char *serv, | 30 | const char *inet_trybind(p_socket ps, const char *address, const char *serv, |
31 | struct addrinfo *bindhints); | 31 | struct addrinfo *bindhints); |
32 | const char *inet_trydisconnect(p_socket ps, int family, p_timeout tm); | 32 | const char *inet_trydisconnect(p_socket ps, int family, p_timeout tm); |
33 | const char *inet_tryaccept(p_socket server, int family, p_socket client, p_timeout tm); | ||
33 | 34 | ||
34 | int inet_meth_getpeername(lua_State *L, p_socket ps, int family); | 35 | int inet_meth_getpeername(lua_State *L, p_socket ps, int family); |
35 | int inet_meth_getsockname(lua_State *L, p_socket ps, int family); | 36 | int inet_meth_getsockname(lua_State *L, p_socket ps, int family); |
diff --git a/src/makefile b/src/makefile index 7e5f2e2..42b745e 100644 --- a/src/makefile +++ b/src/makefile | |||
@@ -32,7 +32,7 @@ LUAINC_macosx_base?=/opt/local/include | |||
32 | LUAINC_macosx?=$(LUAINC_macosx_base)/lua$(LUAV) | 32 | LUAINC_macosx?=$(LUAINC_macosx_base)/lua$(LUAV) |
33 | # FIXME default should this default to fink or to macports? | 33 | # FIXME default should this default to fink or to macports? |
34 | # What happens when more than one Lua version is installed? | 34 | # What happens when more than one Lua version is installed? |
35 | LUAPREFIX_macosx?=/opt/local/ | 35 | LUAPREFIX_macosx?=/opt/local |
36 | 36 | ||
37 | # LUAINC_linux: | 37 | # LUAINC_linux: |
38 | # /usr/include/lua$(LUAV) | 38 | # /usr/include/lua$(LUAV) |
@@ -186,9 +186,9 @@ static int meth_accept(lua_State *L) | |||
186 | p_tcp server = (p_tcp) auxiliar_checkclass(L, "tcp{server}", 1); | 186 | p_tcp server = (p_tcp) auxiliar_checkclass(L, "tcp{server}", 1); |
187 | p_timeout tm = timeout_markstart(&server->tm); | 187 | p_timeout tm = timeout_markstart(&server->tm); |
188 | t_socket sock; | 188 | t_socket sock; |
189 | int err = socket_accept(&server->sock, &sock, NULL, NULL, tm); | 189 | const char *err = inet_tryaccept(&server->sock, server->family, &sock, tm); |
190 | /* if successful, push client socket */ | 190 | /* if successful, push client socket */ |
191 | if (err == IO_DONE) { | 191 | if (err == NULL) { |
192 | p_tcp clnt = (p_tcp) lua_newuserdata(L, sizeof(t_tcp)); | 192 | p_tcp clnt = (p_tcp) lua_newuserdata(L, sizeof(t_tcp)); |
193 | auxiliar_setclass(L, "tcp{client}", -1); | 193 | auxiliar_setclass(L, "tcp{client}", -1); |
194 | /* initialize structure fields */ | 194 | /* initialize structure fields */ |
@@ -203,7 +203,7 @@ static int meth_accept(lua_State *L) | |||
203 | return 1; | 203 | return 1; |
204 | } else { | 204 | } else { |
205 | lua_pushnil(L); | 205 | lua_pushnil(L); |
206 | lua_pushstring(L, socket_strerror(err)); | 206 | lua_pushstring(L, err); |
207 | return 2; | 207 | return 2; |
208 | } | 208 | } |
209 | } | 209 | } |
diff --git a/src/usocket.c b/src/usocket.c index 7150996..096ecd0 100644 --- a/src/usocket.c +++ b/src/usocket.c | |||
@@ -181,11 +181,7 @@ int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) { | |||
181 | * Accept with timeout | 181 | * Accept with timeout |
182 | \*-------------------------------------------------------------------------*/ | 182 | \*-------------------------------------------------------------------------*/ |
183 | int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, p_timeout tm) { | 183 | int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, p_timeout tm) { |
184 | SA daddr; | ||
185 | socklen_t dlen = sizeof(daddr); | ||
186 | if (*ps == SOCKET_INVALID) return IO_CLOSED; | 184 | if (*ps == SOCKET_INVALID) return IO_CLOSED; |
187 | if (!addr) addr = &daddr; | ||
188 | if (!len) len = &dlen; | ||
189 | for ( ;; ) { | 185 | for ( ;; ) { |
190 | int err; | 186 | int err; |
191 | if ((*pa = accept(*ps, addr, len)) != SOCKET_INVALID) return IO_DONE; | 187 | if ((*pa = accept(*ps, addr, len)) != SOCKET_INVALID) return IO_DONE; |
diff --git a/src/usocket.h b/src/usocket.h index 75bfe82..8b3241b 100644 --- a/src/usocket.h +++ b/src/usocket.h | |||
@@ -36,6 +36,7 @@ | |||
36 | 36 | ||
37 | typedef int t_socket; | 37 | typedef int t_socket; |
38 | typedef t_socket *p_socket; | 38 | typedef t_socket *p_socket; |
39 | typedef struct sockaddr_storage t_sockaddr_storage; | ||
39 | 40 | ||
40 | #define SOCKET_INVALID (-1) | 41 | #define SOCKET_INVALID (-1) |
41 | 42 | ||
diff --git a/src/wsocket.c b/src/wsocket.c index 36c10ff..5b184cf 100644 --- a/src/wsocket.c +++ b/src/wsocket.c | |||
@@ -169,11 +169,7 @@ int socket_listen(p_socket ps, int backlog) { | |||
169 | \*-------------------------------------------------------------------------*/ | 169 | \*-------------------------------------------------------------------------*/ |
170 | int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, | 170 | int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, |
171 | p_timeout tm) { | 171 | p_timeout tm) { |
172 | SA daddr; | ||
173 | socklen_t dlen = sizeof(daddr); | ||
174 | if (*ps == SOCKET_INVALID) return IO_CLOSED; | 172 | if (*ps == SOCKET_INVALID) return IO_CLOSED; |
175 | if (!addr) addr = &daddr; | ||
176 | if (!len) len = &dlen; | ||
177 | for ( ;; ) { | 173 | for ( ;; ) { |
178 | int err; | 174 | int err; |
179 | /* try to get client socket */ | 175 | /* try to get client socket */ |
diff --git a/src/wsocket.h b/src/wsocket.h index 8e0f114..0783b00 100644 --- a/src/wsocket.h +++ b/src/wsocket.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <ws2tcpip.h> | 12 | #include <ws2tcpip.h> |
13 | 13 | ||
14 | typedef int socklen_t; | 14 | typedef int socklen_t; |
15 | typedef SOCKADDR_STORAGE t_sockaddr_storage; | ||
15 | typedef SOCKET t_socket; | 16 | typedef SOCKET t_socket; |
16 | typedef t_socket *p_socket; | 17 | typedef t_socket *p_socket; |
17 | 18 | ||