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:
| M | luad.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]);
}
}