diff --git a/ChangeLog b/ChangeLog index 3a238589d588800873309f39d1d9b8cee6fe4444..50dd56b4cc263734a2345abea89b8d576f1d5948 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ 2013-06-18 Niels Möller <nisse@lysator.liu.se> From lsh-2.0.4 branch: + * src/testsuite/mini-inetd.c (main): Clear O_NONBLOCK flag on + accepted sockets. * src/testsuite/tcpconnect.c: Include netinet/in.h. (main): Set seen_remote_eof and seen_stdin_eof flags at EOF. diff --git a/src/testsuite/mini-inetd.c b/src/testsuite/mini-inetd.c index f84000236db9ef7010e5e60cabff516cf01bc0b3..c34d6b566f34ed6e8863835db287e7f92bdaf08c 100644 --- a/src/testsuite/mini-inetd.c +++ b/src/testsuite/mini-inetd.c @@ -291,6 +291,7 @@ main (int argc, char **argv) if (FD_ISSET(fds[i], &wanted)) { int conn; + int flags; conn = accept(fds[i], NULL, NULL); if (conn < 0) @@ -299,6 +300,16 @@ main (int argc, char **argv) die("accept failed: %s\n", STRERROR(errno)); continue; } + + /* With traditional BSD behavior, the acccepted socket + inherits the O_NONBLOCK flag from the listening socket. + So clear it explicitly. */ + flags = fcntl(conn, F_GETFL); + if (flags < 0) + werror("fcntl F_GETFL failed: %s\n", STRERROR(errno)); + else if (fcntl(conn, F_SETFL, flags & ~O_NONBLOCK) < 0) + werror("fcntl F_SETFL failed: %s\n", STRERROR(errno)); + start_service (conn, argv[1], argv + 2); if (max_connections)