From 3269290b6af18ae96b1624e79b30abcb869d0420 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Thu, 13 Apr 2023 09:01:57 +1000 Subject: aio: support accept ?-noclose? And also fix a minor bug that if unable to format the socket address the file descriptor would be left open. Signed-off-by: Steve Bennett --- jim-aio.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/jim-aio.c b/jim-aio.c index 17b394d..e3d0e96 100644 --- a/jim-aio.c +++ b/jim-aio.c @@ -1284,6 +1284,8 @@ static int aio_cmd_accept(Jim_Interp *interp, int argc, Jim_Obj *const *argv) union sockaddr_any sa; socklen_t salen = sizeof(sa); Jim_Obj *filenameObj; + int n = 0; + int flags = AIO_NODELETE; sock = accept(af->fd, &sa.sa, &salen); if (sock < 0) { @@ -1291,8 +1293,14 @@ static int aio_cmd_accept(Jim_Interp *interp, int argc, Jim_Obj *const *argv) return JIM_ERR; } - if (argc > 0) { - if (JimSetVariableSocketAddress(interp, argv[0], &sa, salen) != JIM_OK) { + if (argc > 0 && Jim_CompareStringImmediate(interp, argv[0], "-noclose")) { + flags = AIO_KEEPOPEN; + n++; + } + + if (argc > n) { + if (JimSetVariableSocketAddress(interp, argv[n], &sa, salen) != JIM_OK) { + close(sock); return JIM_ERR; } } @@ -1305,7 +1313,7 @@ static int aio_cmd_accept(Jim_Interp *interp, int argc, Jim_Obj *const *argv) /* Create the file command */ return JimMakeChannel(interp, sock, filenameObj, - "aio.sockstream%ld", af->addr_family, AIO_NODELETE) ? JIM_OK : JIM_ERR; + "aio.sockstream%ld", af->addr_family, flags) ? JIM_OK : JIM_ERR; } static int aio_cmd_sockname(Jim_Interp *interp, int argc, Jim_Obj *const *argv) -- cgit v1.1