mirror of
https://github.com/lunarmodules/luasocket.git
synced 2024-12-27 04:48:21 +01:00
Fix socket_accept usage to depend on family.
This commit is contained in:
parent
66670c3541
commit
618ce43ee3
16
src/inet.c
16
src/inet.c
@ -263,7 +263,6 @@ int inet_meth_getpeername(lua_State *L, p_socket ps, int family)
|
|||||||
lua_pushliteral(L, "inet6");
|
lua_pushliteral(L, "inet6");
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
return 2;
|
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
@ -423,6 +422,21 @@ const char *inet_tryconnect(p_socket ps, const char *address,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
* Tries to accept a socket
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
const char *inet_tryaccept(p_socket server, int family, p_socket client, p_timeout tm)
|
||||||
|
{
|
||||||
|
socklen_t len;
|
||||||
|
t_sockaddr_storage addr;
|
||||||
|
if (family == PF_INET6) {
|
||||||
|
len = sizeof(struct sockaddr_in6);
|
||||||
|
} else {
|
||||||
|
len = sizeof(struct sockaddr_in);
|
||||||
|
}
|
||||||
|
return socket_strerror(socket_accept(server, client, (SA *) &addr, &len, tm));
|
||||||
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------*\
|
||||||
* Tries to bind socket to (address, port)
|
* Tries to bind socket to (address, port)
|
||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
|
@ -30,6 +30,7 @@ const char *inet_tryconnect(p_socket ps, const char *address,
|
|||||||
const char *inet_trybind(p_socket ps, const char *address, const char *serv,
|
const char *inet_trybind(p_socket ps, const char *address, const char *serv,
|
||||||
struct addrinfo *bindhints);
|
struct addrinfo *bindhints);
|
||||||
const char *inet_trydisconnect(p_socket ps, int family, p_timeout tm);
|
const char *inet_trydisconnect(p_socket ps, int family, p_timeout tm);
|
||||||
|
const char *inet_tryaccept(p_socket server, int family, p_socket client, p_timeout tm);
|
||||||
|
|
||||||
int inet_meth_getpeername(lua_State *L, p_socket ps, int family);
|
int inet_meth_getpeername(lua_State *L, p_socket ps, int family);
|
||||||
int inet_meth_getsockname(lua_State *L, p_socket ps, int family);
|
int inet_meth_getsockname(lua_State *L, p_socket ps, int family);
|
||||||
|
@ -32,7 +32,7 @@ LUAINC_macosx_base?=/opt/local/include
|
|||||||
LUAINC_macosx?=$(LUAINC_macosx_base)/lua$(LUAV)
|
LUAINC_macosx?=$(LUAINC_macosx_base)/lua$(LUAV)
|
||||||
# FIXME default should this default to fink or to macports?
|
# FIXME default should this default to fink or to macports?
|
||||||
# What happens when more than one Lua version is installed?
|
# What happens when more than one Lua version is installed?
|
||||||
LUAPREFIX_macosx?=/opt/local/
|
LUAPREFIX_macosx?=/opt/local
|
||||||
|
|
||||||
# LUAINC_linux:
|
# LUAINC_linux:
|
||||||
# /usr/include/lua$(LUAV)
|
# /usr/include/lua$(LUAV)
|
||||||
|
@ -186,9 +186,9 @@ static int meth_accept(lua_State *L)
|
|||||||
p_tcp server = (p_tcp) auxiliar_checkclass(L, "tcp{server}", 1);
|
p_tcp server = (p_tcp) auxiliar_checkclass(L, "tcp{server}", 1);
|
||||||
p_timeout tm = timeout_markstart(&server->tm);
|
p_timeout tm = timeout_markstart(&server->tm);
|
||||||
t_socket sock;
|
t_socket sock;
|
||||||
int err = socket_accept(&server->sock, &sock, NULL, NULL, tm);
|
const char *err = inet_tryaccept(&server->sock, server->family, &sock, tm);
|
||||||
/* if successful, push client socket */
|
/* if successful, push client socket */
|
||||||
if (err == IO_DONE) {
|
if (err == NULL) {
|
||||||
p_tcp clnt = (p_tcp) lua_newuserdata(L, sizeof(t_tcp));
|
p_tcp clnt = (p_tcp) lua_newuserdata(L, sizeof(t_tcp));
|
||||||
auxiliar_setclass(L, "tcp{client}", -1);
|
auxiliar_setclass(L, "tcp{client}", -1);
|
||||||
/* initialize structure fields */
|
/* initialize structure fields */
|
||||||
@ -203,7 +203,7 @@ static int meth_accept(lua_State *L)
|
|||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
lua_pushstring(L, socket_strerror(err));
|
lua_pushstring(L, err);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -181,11 +181,7 @@ int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) {
|
|||||||
* Accept with timeout
|
* Accept with timeout
|
||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, p_timeout tm) {
|
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 (*ps == SOCKET_INVALID) return IO_CLOSED;
|
||||||
if (!addr) addr = &daddr;
|
|
||||||
if (!len) len = &dlen;
|
|
||||||
for ( ;; ) {
|
for ( ;; ) {
|
||||||
int err;
|
int err;
|
||||||
if ((*pa = accept(*ps, addr, len)) != SOCKET_INVALID) return IO_DONE;
|
if ((*pa = accept(*ps, addr, len)) != SOCKET_INVALID) return IO_DONE;
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
typedef int t_socket;
|
typedef int t_socket;
|
||||||
typedef t_socket *p_socket;
|
typedef t_socket *p_socket;
|
||||||
|
typedef struct sockaddr_storage t_sockaddr_storage;
|
||||||
|
|
||||||
#define SOCKET_INVALID (-1)
|
#define SOCKET_INVALID (-1)
|
||||||
|
|
||||||
|
@ -169,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,
|
int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len,
|
||||||
p_timeout tm) {
|
p_timeout tm) {
|
||||||
SA daddr;
|
|
||||||
socklen_t dlen = sizeof(daddr);
|
|
||||||
if (*ps == SOCKET_INVALID) return IO_CLOSED;
|
if (*ps == SOCKET_INVALID) return IO_CLOSED;
|
||||||
if (!addr) addr = &daddr;
|
|
||||||
if (!len) len = &dlen;
|
|
||||||
for ( ;; ) {
|
for ( ;; ) {
|
||||||
int err;
|
int err;
|
||||||
/* try to get client socket */
|
/* try to get client socket */
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
|
|
||||||
typedef int socklen_t;
|
typedef int socklen_t;
|
||||||
|
typedef SOCKADDR_STORAGE t_sockaddr_storage;
|
||||||
typedef SOCKET t_socket;
|
typedef SOCKET t_socket;
|
||||||
typedef t_socket *p_socket;
|
typedef t_socket *p_socket;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user