2 * Test close "syscall".
10 #include <sys/socket.h>
11 #include <netinet/in.h>
14 #include "swift_types.h"
22 static void close_dummy(void);
23 static void close_invalid_descriptor(void);
24 static void close_descriptor_is_not_a_socket(void);
25 static void close_ok_descriptor_is_not_bound(void);
26 static void close_ok_descriptor_is_bound(void);
28 void close_test_suite(void)
32 close_invalid_descriptor();
33 close_descriptor_is_not_a_socket();
34 close_ok_descriptor_is_not_bound();
35 close_ok_descriptor_is_bound();
38 static void close_dummy(void)
43 /* Pass invalid file descriptor to close. */
44 static void close_invalid_descriptor(void)
50 test(rc < 0 && errno == EBADF);
53 /* Pass a duplicate of standard output to close. */
54 static void close_descriptor_is_not_a_socket(void)
59 fd = dup(STDOUT_FILENO);
64 test(rc < 0 && errno == EBADF);
69 /* Pass a non-bound socket. */
70 static void close_ok_descriptor_is_not_bound(void)
75 s = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
83 /* Pass a bound socket. */
84 static void close_ok_descriptor_is_bound(void)
88 struct sockaddr_sw addr;
90 s = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
93 memset(&addr, 0, sizeof(addr));
94 addr.sin_family = AF_INET;
95 addr.sin_addr.s_addr = INADDR_ANY;
96 rc = bind(s, (struct sockaddr *) &addr, sizeof(addr));