summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorruki <[email protected]>2019-12-20 00:53:14 +0800
committerruki <[email protected]>2019-12-19 23:19:27 +0800
commit4ce400a33c26c4d59e76ccb5dc321fe6dabc60f7 (patch)
tree7fba42df02bab3ab2702ad57c896002b22cb6518 /core/src
parentdb52fd10877391ebc89be2c6551b94901a31e7b6 (diff)
add unix socket support
Diffstat (limited to 'core/src')
-rw-r--r--core/src/xmake/io/socket_bind.c14
-rw-r--r--core/src/xmake/io/socket_connect.c14
2 files changed, 20 insertions, 8 deletions
diff --git a/core/src/xmake/io/socket_bind.c b/core/src/xmake/io/socket_bind.c
index 7f1bae584..dd3248084 100644
--- a/core/src/xmake/io/socket_bind.c
+++ b/core/src/xmake/io/socket_bind.c
@@ -56,15 +56,21 @@ tb_int_t xm_io_socket_bind(lua_State* lua)
tb_char_t const* address = lua_tostring(lua, 2);
tb_assert_and_check_return_val(address, 0);
- // get port
- tb_uint16_t port = (tb_uint16_t)luaL_checknumber(lua, 3);
-
// get family
tb_uint8_t family = (tb_uint8_t)luaL_checknumber(lua, 4);
// init address
tb_ipaddr_t addr;
- tb_ipaddr_set(&addr, address, port, family);
+ if (family == TB_IPADDR_FAMILY_UNIX)
+ {
+ tb_bool_t is_abstract = (tb_bool_t)lua_toboolean(lua, 3);
+ tb_ipaddr_unix_set_cstr(&addr, address, is_abstract);
+ }
+ else
+ {
+ tb_uint16_t port = (tb_uint16_t)luaL_checknumber(lua, 3);
+ tb_ipaddr_set(&addr, address, port, family);
+ }
// bind socket
lua_pushboolean(lua, tb_socket_bind(sock, &addr));
diff --git a/core/src/xmake/io/socket_connect.c b/core/src/xmake/io/socket_connect.c
index 68fe60d7d..d7a8faa4d 100644
--- a/core/src/xmake/io/socket_connect.c
+++ b/core/src/xmake/io/socket_connect.c
@@ -56,15 +56,21 @@ tb_int_t xm_io_socket_connect(lua_State* lua)
tb_char_t const* address = lua_tostring(lua, 2);
tb_assert_and_check_return_val(address, 0);
- // get port
- tb_uint16_t port = (tb_uint16_t)luaL_checknumber(lua, 3);
-
// get family
tb_uint8_t family = (tb_uint8_t)luaL_checknumber(lua, 4);
// init address
tb_ipaddr_t addr;
- tb_ipaddr_set(&addr, address, port, family);
+ if (family == TB_IPADDR_FAMILY_UNIX)
+ {
+ tb_bool_t is_abstract = (tb_bool_t)lua_toboolean(lua, 3);
+ tb_ipaddr_unix_set_cstr(&addr, address, is_abstract);
+ }
+ else
+ {
+ tb_uint16_t port = (tb_uint16_t)luaL_checknumber(lua, 3);
+ tb_ipaddr_set(&addr, address, port, family);
+ }
// connect socket
lua_pushnumber(lua, (tb_int_t)tb_socket_connect(sock, &addr));