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)