commit 5564cf055458868e01fd8d950ed571194cfb912b
parent f3a13630d30e3b4d9d84562782260de010c989fd
Author: Daniel Barlow <dan@telent.net>
Date: Thu, 11 Apr 2024 23:07:02 +0100
add nellie.close
Diffstat:
2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/pkgs/nellie/nellie.c b/pkgs/nellie/nellie.c
@@ -6,17 +6,16 @@
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
-/* static int l_close_socket(lua_State *L) { */
-/* LStream *p = (LStream *) luaL_checkudata(L, 1, LUA_FILEHANDLE); */
-/* int res = fclose(p->f); */
-/* return luaL_fileresult(L, (res == 0), NULL); */
-/* } */
-
+static int l_close_socket(lua_State *L) {
+ lua_getfield(L, 1, "fileno");
+ int fd = (int) lua_tointeger(L, -1);
+ close(fd);
+ return 0;
+}
static int l_read_from_socket(lua_State *L) {
- /* struct sockaddr_nl sa; */
- /* memset(&sa, 0, sizeof(sa)); */
int length = 32;
if(lua_isnumber(L, 2))
@@ -64,6 +63,10 @@ static int l_open_socket(lua_State *L) {
lua_pushcfunction(L, l_read_from_socket);
lua_settable(L, 1);
+ lua_pushliteral(L, "close");
+ lua_pushcfunction(L, l_close_socket);
+ lua_settable(L, 1);
+
return 1;
} else {
return 0;
diff --git a/pkgs/nellie/test.lua b/pkgs/nellie/test.lua
@@ -3,3 +3,4 @@ print('dfg')
local f = nellie.open(2)
print(string.byte(f:read(1000), 0, 60))
+print("CLOSED", f:close())