Skip to content

Commit

Permalink
feat(tcp): Add 'bindtodevice' option
Browse files Browse the repository at this point in the history
  • Loading branch information
leso-kn committed Oct 14, 2023
1 parent 8c2ff72 commit e485f75
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 0 deletions.
25 changes: 25 additions & 0 deletions src/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,31 @@ int opt_meth_getoption(lua_State *L, p_opt opt, p_socket ps)
return opt->func(L, ps);
}

/*------------------------------------------------------*/
/* binds socket to network interface */
int opt_set_bindtodevice(lua_State *L, p_socket ps)
{
#ifdef __APPLE__
return luaL_error(L, "SO_BINDTODEVICE is not supported on this operating system");
#else
const char *dev = luaL_checkstring(L, 3);
return opt_set(L, ps, SOL_SOCKET, SO_BINDTODEVICE, (char*)dev, strlen(dev)+1);
#endif
}

int opt_get_bindtodevice(lua_State *L, p_socket ps)
{
#ifdef __APPLE__
return luaL_error(L, "SO_BINDTODEVICE is not supported on this operating system");
#else
char dev[IFNAMSIZ];
int len = sizeof(dev);
opt_get(L, ps, SOL_SOCKET, SO_BINDTODEVICE, &dev, &len);
lua_pushstring(L, dev);
return 1;
#endif
}

/*------------------------------------------------------*/
/* enables reuse of local address */
int opt_set_reuseaddr(lua_State *L, p_socket ps)
Expand Down
3 changes: 3 additions & 0 deletions src/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ int opt_get_tcp_keepintvl(lua_State *L, p_socket ps);
int opt_set_tcp_defer_accept(lua_State *L, p_socket ps);
#endif

int opt_set_bindtodevice(lua_State *L, p_socket ps);
int opt_get_bindtodevice(lua_State *L, p_socket ps);

int opt_set_keepalive(lua_State *L, p_socket ps);
int opt_get_keepalive(lua_State *L, p_socket ps);

Expand Down
2 changes: 2 additions & 0 deletions src/tcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ static luaL_Reg tcp_methods[] = {

/* socket option handlers */
static t_opt optget[] = {
{"bindtodevice", opt_get_bindtodevice},
{"keepalive", opt_get_keepalive},
{"reuseaddr", opt_get_reuseaddr},
{"reuseport", opt_get_reuseport},
Expand All @@ -92,6 +93,7 @@ static t_opt optget[] = {
};

static t_opt optset[] = {
{"bindtodevice", opt_set_bindtodevice},
{"keepalive", opt_set_keepalive},
{"reuseaddr", opt_set_reuseaddr},
{"reuseport", opt_set_reuseport},
Expand Down

0 comments on commit e485f75

Please sign in to comment.