luad

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit f2b13bc34cbf2f7b2ef9ee54a31b6d2c411c7ccc
parent 3e8640e54f5515974675d1ccc1e92d06f94d831d
Author: Daniel Barlow <dan@telent.net>
Date:   Mon,  1 Jun 2026 15:51:38 +0100

move check for full peer table

if we can't accept any more connections, don't poll the socket

Diffstat:
Mluad.c | 48++++++++++++++++++++++++++----------------------
1 file changed, 26 insertions(+), 22 deletions(-)

diff --git a/luad.c b/luad.c @@ -256,33 +256,37 @@ int main(int argc, char **argv) }; while(1) { - if(poll(pollfds, 2, 10000) == 0) + pollfds[0].revents = 0; + pollfds[1].revents = 0; + + /* if find_peer says the peer table is full, don't poll the + * socket + */ + if(poll(pollfds, find_peer(0) ? 2 : 1, 10000) == 0) continue; if(pollfds[1].revents) { - if(find_peer(0)) { - int len = recvmsg(socket, &msg , 0); - if(len <= 0) continue; - - int peer_fds[3]; - if(fds_from_msg(&msg, peer_fds)) { - char *argline = malloc(len); - if(! argline) { - die("malloc failed"); - } - memmove(argline, buf, len); + int len = recvmsg(socket, &msg , 0); + if(len <= 0) continue; + + int peer_fds[3]; + if(fds_from_msg(&msg, peer_fds)) { + char *argline = malloc(len); + if(! argline) { + die("malloc failed"); + } + memmove(argline, buf, len); - if(msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC)) { - hangup_peer(socket, &peer_addr, msg.msg_namelen, 0xffff); - } else { - pid_t child_pid = fork_lua(L, argline, len, peer_fds); - register_peer(child_pid, &peer_addr, msg.msg_namelen); - } - /* close peer fds in parent */ - close(peer_fds[0]); - close(peer_fds[1]); - close(peer_fds[2]); + if(msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC)) { + hangup_peer(socket, &peer_addr, msg.msg_namelen, 0xffff); + } else { + pid_t child_pid = fork_lua(L, argline, len, peer_fds); + register_peer(child_pid, &peer_addr, msg.msg_namelen); } + /* close peer fds in parent */ + close(peer_fds[0]); + close(peer_fds[1]); + close(peer_fds[2]); } }