mirror of
https://github.com/lunarmodules/luasocket.git
synced 2025-04-30 20:26:44 +02:00
Compare commits
15 Commits
149b500388
...
edf744be67
Author | SHA1 | Date | |
---|---|---|---|
|
edf744be67 | ||
|
8a5368b659 | ||
|
22b8202d70 | ||
|
3a817a56eb | ||
|
7eaf648056 | ||
|
bef62aeb50 | ||
|
43a97b7f00 | ||
|
64c9d531df | ||
|
0f37af645c | ||
|
9c6195ea62 | ||
|
708e50f8e6 | ||
|
0bc8c56043 | ||
|
f741a88b80 | ||
|
9100f7e3ab | ||
|
ccef3bc4e2 |
17
.github/workflows/build.yml
vendored
17
.github/workflows/build.yml
vendored
@ -8,27 +8,32 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Test build on ${{ matrix.platform }}
|
name: Test ${{ matrix.luaVersion }} on ${{ matrix.platform }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
luaVersion: [ "5.4", "5.3", "5.2", "5.1", "luajit", "luajit-openresty" ]
|
luaVersion: [ "5.4", "5.3", "5.2", "5.1", "luajit", "luajit-openresty" ]
|
||||||
platform: [ "ubuntu-20.04", "macos-11" ] # "windows-2022" not supported by gh-actions-lua
|
platform: [ "ubuntu-22.04", "macos-11", "windows-2022" ]
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
- name: Setup ’msvc’
|
||||||
|
if: ${{ startsWith(matrix.platform, 'windows') && !startsWith(matrix.luaVersion, 'luajit') }}
|
||||||
|
uses: ilammy/msvc-dev-cmd@v1
|
||||||
- name: Setup ‘lua’
|
- name: Setup ‘lua’
|
||||||
uses: leafo/gh-actions-lua@v9
|
uses: leso-kn/gh-actions-lua@v11-staging
|
||||||
with:
|
with:
|
||||||
luaVersion: ${{ matrix.luaVersion }}
|
luaVersion: ${{ matrix.luaVersion }}
|
||||||
- name: Setup ‘luarocks’
|
- name: Setup ‘luarocks’
|
||||||
uses: leafo/gh-actions-luarocks@v4
|
uses: hishamhm/gh-actions-luarocks@master
|
||||||
- name: Make and install
|
- name: Make and install
|
||||||
run: |
|
run: |
|
||||||
export DEBUG=DEBUG
|
|
||||||
luarocks make -- luasocket-scm-3.rockspec
|
luarocks make -- luasocket-scm-3.rockspec
|
||||||
|
env:
|
||||||
|
DEBUG: DEBUG
|
||||||
- name: Run regression tests
|
- name: Run regression tests
|
||||||
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cd test
|
cd test
|
||||||
lua hello.lua
|
lua hello.lua
|
||||||
|
6
.github/workflows/luacheck.yml
vendored
6
.github/workflows/luacheck.yml
vendored
@ -5,9 +5,9 @@ on: [push, pull_request]
|
|||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
luacheck:
|
luacheck:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: Luacheck
|
- name: Luacheck
|
||||||
uses: lunarmodules/luacheck@v0
|
uses: lunarmodules/luacheck@v1
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
# LuaSocket
|
# LuaSocket
|
||||||
|
|
||||||
|
|
||||||
[](https://github.com/lunarmodules/luasocket/actions?workflow=Build)
|
[](https://github.com/lunarmodules/luasocket/actions?workflow=Build)
|
||||||
[](https://github.com/lunarmodules/luasocket/actions?workflow=Luacheck)
|
[](https://github.com/lunarmodules/luasocket/actions?workflow=Luacheck)
|
||||||
[](https://github.com/lunarmodules/luasocket/releases)
|
[](https://github.com/lunarmodules/luasocket/releases)
|
||||||
[](https://luarocks.org/modules/lunarmodules/luasocket)
|
[](https://luarocks.org/modules/lunarmodules/luasocket)
|
||||||
|
|
||||||
|
@ -290,7 +290,7 @@ int inet_meth_getsockname(lua_State *L, p_socket ps, int family)
|
|||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
lua_pushstring(L, name);
|
lua_pushstring(L, name);
|
||||||
lua_pushstring(L, port);
|
lua_pushinteger(L, (int) strtol(port, (char **) NULL, 10));
|
||||||
switch (family) {
|
switch (family) {
|
||||||
case AF_INET: lua_pushliteral(L, "inet"); break;
|
case AF_INET: lua_pushliteral(L, "inet"); break;
|
||||||
case AF_INET6: lua_pushliteral(L, "inet6"); break;
|
case AF_INET6: lua_pushliteral(L, "inet6"); break;
|
||||||
|
@ -54,6 +54,33 @@ int opt_meth_getoption(lua_State *L, p_opt opt, p_socket ps)
|
|||||||
return opt->func(L, ps);
|
return opt->func(L, ps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------*/
|
||||||
|
/* binds socket to network interface */
|
||||||
|
int opt_set_bindtodevice(lua_State *L, p_socket ps)
|
||||||
|
{
|
||||||
|
#ifndef SO_BINDTODEVICE
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
#ifndef SO_BINDTODEVICE
|
||||||
|
return luaL_error(L, "SO_BINDTODEVICE is not supported on this operating system");
|
||||||
|
#else
|
||||||
|
char dev[IFNAMSIZ];
|
||||||
|
int len = sizeof(dev);
|
||||||
|
int err = opt_get(L, ps, SOL_SOCKET, SO_BINDTODEVICE, &dev, &len);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
lua_pushstring(L, dev);
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------*/
|
/*------------------------------------------------------*/
|
||||||
/* enables reuse of local address */
|
/* enables reuse of local address */
|
||||||
int opt_set_reuseaddr(lua_State *L, p_socket ps)
|
int opt_set_reuseaddr(lua_State *L, p_socket ps)
|
||||||
|
@ -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);
|
int opt_set_tcp_defer_accept(lua_State *L, p_socket ps);
|
||||||
#endif
|
#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_set_keepalive(lua_State *L, p_socket ps);
|
||||||
int opt_get_keepalive(lua_State *L, p_socket ps);
|
int opt_get_keepalive(lua_State *L, p_socket ps);
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#define PIE_CONNREFUSED "connection refused"
|
#define PIE_CONNREFUSED "connection refused"
|
||||||
#define PIE_CONNABORTED "closed"
|
#define PIE_CONNABORTED "closed"
|
||||||
#define PIE_CONNRESET "closed"
|
#define PIE_CONNRESET "closed"
|
||||||
#define PIE_TIMEDOUT "timeout"
|
#define PIE_TIMEDOUT "connection timeout"
|
||||||
#define PIE_AGAIN "temporary failure in name resolution"
|
#define PIE_AGAIN "temporary failure in name resolution"
|
||||||
#define PIE_BADFLAGS "invalid value for ai_flags"
|
#define PIE_BADFLAGS "invalid value for ai_flags"
|
||||||
#define PIE_BADHINTS "invalid value for hints"
|
#define PIE_BADHINTS "invalid value for hints"
|
||||||
|
@ -71,6 +71,7 @@ static luaL_Reg tcp_methods[] = {
|
|||||||
|
|
||||||
/* socket option handlers */
|
/* socket option handlers */
|
||||||
static t_opt optget[] = {
|
static t_opt optget[] = {
|
||||||
|
{"bindtodevice", opt_get_bindtodevice},
|
||||||
{"keepalive", opt_get_keepalive},
|
{"keepalive", opt_get_keepalive},
|
||||||
{"reuseaddr", opt_get_reuseaddr},
|
{"reuseaddr", opt_get_reuseaddr},
|
||||||
{"reuseport", opt_get_reuseport},
|
{"reuseport", opt_get_reuseport},
|
||||||
@ -92,6 +93,7 @@ static t_opt optget[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static t_opt optset[] = {
|
static t_opt optset[] = {
|
||||||
|
{"bindtodevice", opt_set_bindtodevice},
|
||||||
{"keepalive", opt_set_keepalive},
|
{"keepalive", opt_set_keepalive},
|
||||||
{"reuseaddr", opt_set_reuseaddr},
|
{"reuseaddr", opt_set_reuseaddr},
|
||||||
{"reuseport", opt_set_reuseport},
|
{"reuseport", opt_set_reuseport},
|
||||||
|
@ -152,7 +152,7 @@ function _M.parse(url, default)
|
|||||||
url = string.gsub(url, "^([%w][%w%+%-%.]*)%:",
|
url = string.gsub(url, "^([%w][%w%+%-%.]*)%:",
|
||||||
function(s) parsed.scheme = s; return "" end)
|
function(s) parsed.scheme = s; return "" end)
|
||||||
-- get authority
|
-- get authority
|
||||||
url = string.gsub(url, "^//([^/]*)", function(n)
|
url = string.gsub(url, "^//([^/%?#]*)", function(n)
|
||||||
parsed.authority = n
|
parsed.authority = n
|
||||||
return ""
|
return ""
|
||||||
end)
|
end)
|
||||||
|
@ -262,6 +262,7 @@ int socket_recv(p_socket ps, char *data, size_t count, size_t *got,
|
|||||||
if (err != WSAEWOULDBLOCK) {
|
if (err != WSAEWOULDBLOCK) {
|
||||||
if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
|
if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
|
||||||
prev = err;
|
prev = err;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
|
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
|
||||||
}
|
}
|
||||||
@ -291,6 +292,7 @@ int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
|
|||||||
if (err != WSAEWOULDBLOCK) {
|
if (err != WSAEWOULDBLOCK) {
|
||||||
if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
|
if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
|
||||||
prev = err;
|
prev = err;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
|
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user