aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/tcp.html6
-rw-r--r--src/options.c36
-rw-r--r--src/options.h18
-rw-r--r--src/tcp.c18
-rwxr-xr-xtest/tcp-getoptions4
5 files changed, 81 insertions, 1 deletions
diff --git a/doc/tcp.html b/doc/tcp.html
index c6c6eb2..6050a5f 100644
--- a/doc/tcp.html
+++ b/doc/tcp.html
@@ -477,6 +477,12 @@ used in validating addresses supplied in a call to
477<li> '<tt>tcp-nodelay</tt>': Setting this option to <tt>true</tt> 477<li> '<tt>tcp-nodelay</tt>': Setting this option to <tt>true</tt>
478disables the Nagle's algorithm for the connection; 478disables the Nagle's algorithm for the connection;
479 479
480<li> '<tt>tcp-keepidle</tt>': value in seconds for <tt>TCP_KEEPIDLE</tt> Linux only!!
481
482<li> '<tt>tcp-keepcnt</tt>': value for <tt>TCP_KEEPCNT</tt> Linux only!!
483
484<li> '<tt>tcp-keepintvl</tt>': value for <tt>TCP_KEEPINTVL</tt> Linux only!!
485
480<li> '<tt>ipv6-v6only</tt>': 486<li> '<tt>ipv6-v6only</tt>':
481Setting this option to <tt>true</tt> restricts an <tt>inet6</tt> socket to 487Setting this option to <tt>true</tt> restricts an <tt>inet6</tt> socket to
482sending and receiving only IPv6 packets. 488sending and receiving only IPv6 packets.
diff --git a/src/options.c b/src/options.c
index fabfe8c..90e6d2d 100644
--- a/src/options.c
+++ b/src/options.c
@@ -90,6 +90,42 @@ int opt_get_tcp_nodelay(lua_State *L, p_socket ps)
90 return opt_getboolean(L, ps, IPPROTO_TCP, TCP_NODELAY); 90 return opt_getboolean(L, ps, IPPROTO_TCP, TCP_NODELAY);
91} 91}
92 92
93#ifdef TCP_KEEPIDLE
94int opt_get_tcp_keepidle(lua_State *L, p_socket ps)
95{
96 return opt_getint(L, ps, IPPROTO_TCP, TCP_KEEPIDLE);
97}
98
99int opt_set_tcp_keepidle(lua_State *L, p_socket ps)
100{
101 return opt_setint(L, ps, IPPROTO_TCP, TCP_KEEPIDLE);
102}
103#endif
104
105#ifdef TCP_KEEPCNT
106int opt_get_tcp_keepcnt(lua_State *L, p_socket ps)
107{
108 return opt_getint(L, ps, IPPROTO_TCP, TCP_KEEPCNT);
109}
110
111int opt_set_tcp_keepcnt(lua_State *L, p_socket ps)
112{
113 return opt_setint(L, ps, IPPROTO_TCP, TCP_KEEPCNT);
114}
115#endif
116
117#ifdef TCP_KEEPINTVL
118int opt_get_tcp_keepintvl(lua_State *L, p_socket ps)
119{
120 return opt_getint(L, ps, IPPROTO_TCP, TCP_KEEPINTVL);
121}
122
123int opt_set_tcp_keepintvl(lua_State *L, p_socket ps)
124{
125 return opt_setint(L, ps, IPPROTO_TCP, TCP_KEEPINTVL);
126}
127#endif
128
93int opt_set_keepalive(lua_State *L, p_socket ps) 129int opt_set_keepalive(lua_State *L, p_socket ps)
94{ 130{
95 return opt_setboolean(L, ps, SOL_SOCKET, SO_KEEPALIVE); 131 return opt_setboolean(L, ps, SOL_SOCKET, SO_KEEPALIVE);
diff --git a/src/options.h b/src/options.h
index 19ba0df..2ecc696 100644
--- a/src/options.h
+++ b/src/options.h
@@ -22,6 +22,15 @@ typedef t_opt *p_opt;
22int opt_set_dontroute(lua_State *L, p_socket ps); 22int opt_set_dontroute(lua_State *L, p_socket ps);
23int opt_set_broadcast(lua_State *L, p_socket ps); 23int opt_set_broadcast(lua_State *L, p_socket ps);
24int opt_set_tcp_nodelay(lua_State *L, p_socket ps); 24int opt_set_tcp_nodelay(lua_State *L, p_socket ps);
25#ifdef TCP_KEEPIDLE
26int opt_set_tcp_keepidle(lua_State *L, p_socket ps);
27#endif
28#ifdef TCP_KEEPCNT
29int opt_set_tcp_keepcnt(lua_State *L, p_socket ps);
30#endif
31#ifdef TCP_KEEPINTVL
32int opt_set_tcp_keepintvl(lua_State *L, p_socket ps);
33#endif
25int opt_set_keepalive(lua_State *L, p_socket ps); 34int opt_set_keepalive(lua_State *L, p_socket ps);
26int opt_set_linger(lua_State *L, p_socket ps); 35int opt_set_linger(lua_State *L, p_socket ps);
27int opt_set_reuseaddr(lua_State *L, p_socket ps); 36int opt_set_reuseaddr(lua_State *L, p_socket ps);
@@ -44,6 +53,15 @@ int opt_get_broadcast(lua_State *L, p_socket ps);
44int opt_get_reuseaddr(lua_State *L, p_socket ps); 53int opt_get_reuseaddr(lua_State *L, p_socket ps);
45int opt_get_reuseport(lua_State *L, p_socket ps); 54int opt_get_reuseport(lua_State *L, p_socket ps);
46int opt_get_tcp_nodelay(lua_State *L, p_socket ps); 55int opt_get_tcp_nodelay(lua_State *L, p_socket ps);
56#ifdef TCP_KEEPIDLE
57int opt_get_tcp_keepidle(lua_State *L, p_socket ps);
58#endif
59#ifdef TCP_KEEPCNT
60int opt_get_tcp_keepcnt(lua_State *L, p_socket ps);
61#endif
62#ifdef TCP_KEEPINTVL
63int opt_get_tcp_keepintvl(lua_State *L, p_socket ps);
64#endif
47int opt_get_keepalive(lua_State *L, p_socket ps); 65int opt_get_keepalive(lua_State *L, p_socket ps);
48int opt_get_linger(lua_State *L, p_socket ps); 66int opt_get_linger(lua_State *L, p_socket ps);
49int opt_get_ip_multicast_loop(lua_State *L, p_socket ps); 67int opt_get_ip_multicast_loop(lua_State *L, p_socket ps);
diff --git a/src/tcp.c b/src/tcp.c
index ef9ee6f..79a680b 100644
--- a/src/tcp.c
+++ b/src/tcp.c
@@ -77,6 +77,15 @@ static t_opt optget[] = {
77 {"reuseaddr", opt_get_reuseaddr}, 77 {"reuseaddr", opt_get_reuseaddr},
78 {"reuseport", opt_get_reuseport}, 78 {"reuseport", opt_get_reuseport},
79 {"tcp-nodelay", opt_get_tcp_nodelay}, 79 {"tcp-nodelay", opt_get_tcp_nodelay},
80#ifdef TCP_KEEPIDLE
81 {"tcp-keepidle", opt_get_tcp_keepidle},
82#endif
83#ifdef TCP_KEEPCNT
84 {"tcp-keepcnt", opt_get_tcp_keepcnt},
85#endif
86#ifdef TCP_KEEPINTVL
87 {"tcp-keepintvl", opt_get_tcp_keepintvl},
88#endif
80 {"linger", opt_get_linger}, 89 {"linger", opt_get_linger},
81 {"error", opt_get_error}, 90 {"error", opt_get_error},
82 {NULL, NULL} 91 {NULL, NULL}
@@ -87,6 +96,15 @@ static t_opt optset[] = {
87 {"reuseaddr", opt_set_reuseaddr}, 96 {"reuseaddr", opt_set_reuseaddr},
88 {"reuseport", opt_set_reuseport}, 97 {"reuseport", opt_set_reuseport},
89 {"tcp-nodelay", opt_set_tcp_nodelay}, 98 {"tcp-nodelay", opt_set_tcp_nodelay},
99#ifdef TCP_KEEPIDLE
100 {"tcp-keepidle", opt_set_tcp_keepidle},
101#endif
102#ifdef TCP_KEEPCNT
103 {"tcp-keepcnt", opt_set_tcp_keepcnt},
104#endif
105#ifdef TCP_KEEPINTVL
106 {"tcp-keepintvl", opt_set_tcp_keepintvl},
107#endif
90 {"ipv6-v6only", opt_set_ip6_v6only}, 108 {"ipv6-v6only", opt_set_ip6_v6only},
91 {"linger", opt_set_linger}, 109 {"linger", opt_set_linger},
92 {NULL, NULL} 110 {NULL, NULL}
diff --git a/test/tcp-getoptions b/test/tcp-getoptions
index f9b3d1b..777ccc3 100755
--- a/test/tcp-getoptions
+++ b/test/tcp-getoptions
@@ -7,7 +7,9 @@ port = 8765
7function options(o) 7function options(o)
8 print("options for", o) 8 print("options for", o)
9 9
10 for _, opt in ipairs{"keepalive", "reuseaddr", "tcp-nodelay"} do 10 for _, opt in ipairs{
11 "keepalive", "reuseaddr",
12 "tcp-nodelay", "tcp-keepidle", "tcp-keepcnt", "tcp-keepintvl"} do
11 print("getoption", opt, o:getoption(opt)) 13 print("getoption", opt, o:getoption(opt))
12 end 14 end
13 15