/* Test of passing file descriptors.
- Copyright (C) 2011 Free Software Foundation, Inc.
+ Copyright (C) 2011-2013 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "passfd.h"
+#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <stdlib.h>
int
main ()
{
+#if HAVE_SOCKETPAIR
int pair[2];
int ret;
pid_t pid;
int fd;
struct stat st;
-#if HAVE_DECL_ALARM
+# if HAVE_DECL_ALARM
/* Avoid hanging on failure. */
+ int alarm_value = 5;
signal (SIGALRM, SIG_DFL);
- alarm (5);
-#endif
+ alarm (alarm_value);
+# endif
fdnull = open ("/dev/null", O_RDWR);
if (fdnull < 0)
/* father */
else
{
+ ASSERT (close (pair[1]) == 0);
fd = recvfd (pair[0], 0);
if (fd == -1)
{
perror ("fstat");
return 80;
}
+
+ /* Check behavior when sender no longer around */
+ errno = 0;
+ fd = recvfd (pair[0], 0);
+ ASSERT (fd == -1);
+ ASSERT (errno == ENOTCONN);
+
return 0;
}
+#else
+ errno = 0;
+ ASSERT(sendfd (0, 0) == -1);
+ ASSERT(errno == ENOSYS);
+
+ errno = 0;
+ ASSERT(recvfd (0, 0) == -1);
+ ASSERT(errno == ENOSYS);
+
+ fputs ("skipping test: socketpair not supported on this system\n",
+ stderr);
+ return 77;
+#endif
}