Add TTL support to net module (#1756)
This commit is contained in:
parent
20a591f59a
commit
2c8961d153
|
@ -638,6 +638,27 @@ int net_dns( lua_State *L ) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Lua: client/socket:ttl([ttl])
|
||||||
|
int net_ttl( lua_State *L ) {
|
||||||
|
lnet_userdata *ud = net_get_udata(L);
|
||||||
|
if (!ud || ud->type == TYPE_TCP_SERVER)
|
||||||
|
return luaL_error(L, "invalid user data");
|
||||||
|
if (!ud->pcb)
|
||||||
|
return luaL_error(L, "socket is not open/bound yet");
|
||||||
|
int ttl = luaL_optinteger(L, 2, -1);
|
||||||
|
// Since `ttl` field is part of IP_PCB macro
|
||||||
|
// (which are at beginning of both udp_pcb/tcp_pcb)
|
||||||
|
// and PCBs declared as `union` there is safe to
|
||||||
|
// access ttl field without checking for type.
|
||||||
|
if (ttl == -1) {
|
||||||
|
ttl = ud->udp_pcb->ttl;
|
||||||
|
} else {
|
||||||
|
ud->udp_pcb->ttl = ttl;
|
||||||
|
}
|
||||||
|
lua_pushinteger(L, ttl);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
// Lua: client:getpeer()
|
// Lua: client:getpeer()
|
||||||
int net_getpeer( lua_State *L ) {
|
int net_getpeer( lua_State *L ) {
|
||||||
lnet_userdata *ud = net_get_udata(L);
|
lnet_userdata *ud = net_get_udata(L);
|
||||||
|
@ -951,6 +972,7 @@ static const LUA_REG_TYPE net_tcpsocket_map[] = {
|
||||||
{ LSTRKEY( "hold" ), LFUNCVAL( net_hold ) },
|
{ LSTRKEY( "hold" ), LFUNCVAL( net_hold ) },
|
||||||
{ LSTRKEY( "unhold" ), LFUNCVAL( net_unhold ) },
|
{ LSTRKEY( "unhold" ), LFUNCVAL( net_unhold ) },
|
||||||
{ LSTRKEY( "dns" ), LFUNCVAL( net_dns ) },
|
{ LSTRKEY( "dns" ), LFUNCVAL( net_dns ) },
|
||||||
|
{ LSTRKEY( "ttl" ), LFUNCVAL( net_ttl ) },
|
||||||
{ LSTRKEY( "getpeer" ), LFUNCVAL( net_getpeer ) },
|
{ LSTRKEY( "getpeer" ), LFUNCVAL( net_getpeer ) },
|
||||||
{ LSTRKEY( "getaddr" ), LFUNCVAL( net_getaddr ) },
|
{ LSTRKEY( "getaddr" ), LFUNCVAL( net_getaddr ) },
|
||||||
{ LSTRKEY( "__gc" ), LFUNCVAL( net_delete ) },
|
{ LSTRKEY( "__gc" ), LFUNCVAL( net_delete ) },
|
||||||
|
@ -964,6 +986,7 @@ static const LUA_REG_TYPE net_udpsocket_map[] = {
|
||||||
{ LSTRKEY( "on" ), LFUNCVAL( net_on ) },
|
{ LSTRKEY( "on" ), LFUNCVAL( net_on ) },
|
||||||
{ LSTRKEY( "send" ), LFUNCVAL( net_send ) },
|
{ LSTRKEY( "send" ), LFUNCVAL( net_send ) },
|
||||||
{ LSTRKEY( "dns" ), LFUNCVAL( net_dns ) },
|
{ LSTRKEY( "dns" ), LFUNCVAL( net_dns ) },
|
||||||
|
{ LSTRKEY( "ttl" ), LFUNCVAL( net_ttl ) },
|
||||||
{ LSTRKEY( "getaddr" ), LFUNCVAL( net_getaddr ) },
|
{ LSTRKEY( "getaddr" ), LFUNCVAL( net_getaddr ) },
|
||||||
{ LSTRKEY( "__gc" ), LFUNCVAL( net_delete ) },
|
{ LSTRKEY( "__gc" ), LFUNCVAL( net_delete ) },
|
||||||
{ LSTRKEY( "__index" ), LROVAL( net_udpsocket_map ) },
|
{ LSTRKEY( "__index" ), LROVAL( net_udpsocket_map ) },
|
||||||
|
|
|
@ -400,6 +400,29 @@ end)
|
||||||
#### See also
|
#### See also
|
||||||
[`net.socket:on()`](#netsocketon)
|
[`net.socket:on()`](#netsocketon)
|
||||||
|
|
||||||
|
## net.socket:ttl()
|
||||||
|
|
||||||
|
Changes or retrieves Time-To-Live value on socket.
|
||||||
|
|
||||||
|
#### Syntax
|
||||||
|
`ttl([ttl])`
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
- `ttl` (optional) new time-to-live value
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
current / new ttl value
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
```lua
|
||||||
|
sk = net.createConnection(net.TCP, 0)
|
||||||
|
sk:connect(80, '192.168.1.1')
|
||||||
|
sk:ttl(1) -- restrict frames to single subnet
|
||||||
|
```
|
||||||
|
|
||||||
|
#### See also
|
||||||
|
[`net.createConnection()`](#netcreateconnection)
|
||||||
|
|
||||||
## net.socket:unhold()
|
## net.socket:unhold()
|
||||||
|
|
||||||
Unblock TCP receiving data by revocation of a preceding `hold()`.
|
Unblock TCP receiving data by revocation of a preceding `hold()`.
|
||||||
|
@ -492,6 +515,12 @@ Retrieve local port and ip of socket.
|
||||||
|
|
||||||
The syntax and functional identical to [`net.socket:getaddr()`](#netsocketgetaddr).
|
The syntax and functional identical to [`net.socket:getaddr()`](#netsocketgetaddr).
|
||||||
|
|
||||||
|
## net.udpsocket:ttl()
|
||||||
|
|
||||||
|
Changes or retrieves Time-To-Live value on socket.
|
||||||
|
|
||||||
|
The syntax and functional identical to [`net.socket:ttl()`](#netsocketttl).
|
||||||
|
|
||||||
# net.dns Module
|
# net.dns Module
|
||||||
|
|
||||||
## net.dns.getdnsserver()
|
## net.dns.getdnsserver()
|
||||||
|
|
Loading…
Reference in New Issue