From 2906d6a5227df25f14305c373fdde057f388d363 Mon Sep 17 00:00:00 2001 From: Victor Seva <linuxmaniac@torreviejawireless.org> Date: Fri, 5 Dec 2014 13:17:50 +0100 Subject: Add "tcp-keepidle", "tcp-keepcnt" and "tcp-keepintvl" options --- src/options.c | 36 ++++++++++++++++++++++++++++++++++++ src/options.h | 18 ++++++++++++++++++ src/tcp.c | 18 ++++++++++++++++++ 3 files changed, 72 insertions(+) (limited to 'src') diff --git a/src/options.c b/src/options.c index 8ac2a14..28fc08a 100644 --- a/src/options.c +++ b/src/options.c @@ -90,6 +90,42 @@ int opt_get_tcp_nodelay(lua_State *L, p_socket ps) return opt_getboolean(L, ps, IPPROTO_TCP, TCP_NODELAY); } +#ifdef TCP_KEEPIDLE +int opt_get_tcp_keepidle(lua_State *L, p_socket ps) +{ + return opt_getint(L, ps, IPPROTO_TCP, TCP_KEEPIDLE); +} + +int opt_set_tcp_keepidle(lua_State *L, p_socket ps) +{ + return opt_setint(L, ps, IPPROTO_TCP, TCP_KEEPIDLE); +} +#endif + +#ifdef TCP_KEEPCNT +int opt_get_tcp_keepcnt(lua_State *L, p_socket ps) +{ + return opt_getint(L, ps, IPPROTO_TCP, TCP_KEEPCNT); +} + +int opt_set_tcp_keepcnt(lua_State *L, p_socket ps) +{ + return opt_setint(L, ps, IPPROTO_TCP, TCP_KEEPCNT); +} +#endif + +#ifdef TCP_KEEPINTVL +int opt_get_tcp_keepintvl(lua_State *L, p_socket ps) +{ + return opt_getint(L, ps, IPPROTO_TCP, TCP_KEEPINTVL); +} + +int opt_set_tcp_keepintvl(lua_State *L, p_socket ps) +{ + return opt_setint(L, ps, IPPROTO_TCP, TCP_KEEPINTVL); +} +#endif + int opt_set_keepalive(lua_State *L, p_socket ps) { return opt_setboolean(L, ps, SOL_SOCKET, SO_KEEPALIVE); diff --git a/src/options.h b/src/options.h index 5657a06..2b6697b 100644 --- a/src/options.h +++ b/src/options.h @@ -23,6 +23,15 @@ int opt_set_dontroute(lua_State *L, p_socket ps); int opt_set_broadcast(lua_State *L, p_socket ps); int opt_set_reuseaddr(lua_State *L, p_socket ps); int opt_set_tcp_nodelay(lua_State *L, p_socket ps); +#ifdef TCP_KEEPIDLE +int opt_set_tcp_keepidle(lua_State *L, p_socket ps); +#endif +#ifdef TCP_KEEPCNT +int opt_set_tcp_keepcnt(lua_State *L, p_socket ps); +#endif +#ifdef TCP_KEEPINTVL +int opt_set_tcp_keepintvl(lua_State *L, p_socket ps); +#endif int opt_set_keepalive(lua_State *L, p_socket ps); int opt_set_linger(lua_State *L, p_socket ps); int opt_set_reuseaddr(lua_State *L, p_socket ps); @@ -42,6 +51,15 @@ int opt_set_ip6_v6only(lua_State *L, p_socket ps); /* supported options for getoption */ int opt_get_reuseaddr(lua_State *L, p_socket ps); int opt_get_tcp_nodelay(lua_State *L, p_socket ps); +#ifdef TCP_KEEPIDLE +int opt_get_tcp_keepidle(lua_State *L, p_socket ps); +#endif +#ifdef TCP_KEEPCNT +int opt_get_tcp_keepcnt(lua_State *L, p_socket ps); +#endif +#ifdef TCP_KEEPINTVL +int opt_get_tcp_keepintvl(lua_State *L, p_socket ps); +#endif int opt_get_keepalive(lua_State *L, p_socket ps); int opt_get_linger(lua_State *L, p_socket ps); int opt_get_reuseaddr(lua_State *L, p_socket ps); diff --git a/src/tcp.c b/src/tcp.c index 6594bda..3af9a39 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -72,6 +72,15 @@ static t_opt optget[] = { {"keepalive", opt_get_keepalive}, {"reuseaddr", opt_get_reuseaddr}, {"tcp-nodelay", opt_get_tcp_nodelay}, +#ifdef TCP_KEEPIDLE + {"tcp-keepidle", opt_get_tcp_keepidle}, +#endif +#ifdef TCP_KEEPCNT + {"tcp-keepcnt", opt_get_tcp_keepcnt}, +#endif +#ifdef TCP_KEEPINTVL + {"tcp-keepintvl", opt_get_tcp_keepintvl}, +#endif {"linger", opt_get_linger}, {"error", opt_get_error}, {NULL, NULL} @@ -81,6 +90,15 @@ static t_opt optset[] = { {"keepalive", opt_set_keepalive}, {"reuseaddr", opt_set_reuseaddr}, {"tcp-nodelay", opt_set_tcp_nodelay}, +#ifdef TCP_KEEPIDLE + {"tcp-keepidle", opt_set_tcp_keepidle}, +#endif +#ifdef TCP_KEEPCNT + {"tcp-keepcnt", opt_set_tcp_keepcnt}, +#endif +#ifdef TCP_KEEPINTVL + {"tcp-keepintvl", opt_set_tcp_keepintvl}, +#endif {"ipv6-v6only", opt_set_ip6_v6only}, {"linger", opt_set_linger}, {NULL, NULL} -- cgit v1.2.3-55-g6feb