summaryrefslogtreecommitdiff
path: root/src/conn-tools/s6-tcpserver4.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2015-01-06 19:41:49 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2015-01-06 19:41:49 +0000
commit80f1ebe9aaa1f5fb0ee796f005b0abda1628226d (patch)
tree23ddb10d18ba833a1028fba3e59ab0133520b733 /src/conn-tools/s6-tcpserver4.c
parent752fa538fad7a65a3c88383a843c1649355f9298 (diff)
downloads6-networking-80f1ebe9aaa1f5fb0ee796f005b0abda1628226d.tar.xz
Prevent failure of -1 option in ucspi servers when stdout is closed
Diffstat (limited to 'src/conn-tools/s6-tcpserver4.c')
-rw-r--r--src/conn-tools/s6-tcpserver4.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/conn-tools/s6-tcpserver4.c b/src/conn-tools/s6-tcpserver4.c
index 77ecebd..e030b6d 100644
--- a/src/conn-tools/s6-tcpserver4.c
+++ b/src/conn-tools/s6-tcpserver4.c
@@ -6,6 +6,7 @@
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
+#include <fcntl.h>
#include <limits.h>
#include <grp.h>
#include <signal.h>
@@ -327,8 +328,13 @@ int main (int argc, char const *const *argv, char const *const *envp)
argc -= l.ind ; argv += l.ind ;
if (argc < 3) dieusage() ;
if (!ip4_scan(argv[0], ip) || !uint160_scan(argv[1], &port)) dieusage() ;
- fd_close(0) ;
- if (!flag1) fd_close(1) ;
+ close(0) ;
+ if (flag1)
+ {
+ if (fcntl(1, F_GETFD) < 0)
+ strerr_dief1sys(100, "called with option -1 but stdout said") ;
+ }
+ else close(1) ;
if (!maxconn) maxconn = 1 ;
if (maxconn > ABSOLUTE_MAXCONN) maxconn = ABSOLUTE_MAXCONN ;
if (localmaxconn > maxconn) localmaxconn = maxconn ;