2 * Test socket "syscall".
10 #include <sys/socket.h>
11 #include <netinet/in.h>
14 #include "swift_types.h"
22 static void socket_dummy(void);
23 static void socket_invalid_domain(void);
24 static void socket_invalid_type(void);
25 static void socket_invalid_protocol(void);
26 static void socket_insufficient_file_descriptors(void);
27 static void socket_ok(void);
29 void socket_test_suite(void)
33 socket_invalid_domain();
34 socket_invalid_type();
35 socket_invalid_protocol();
36 run_as_child_process(socket_insufficient_file_descriptors);
40 /* Dummy function for testing purposes only. */
41 static void socket_dummy(void)
46 /* Use invalid domain when calling socket. */
47 static void socket_invalid_domain(void)
51 rc = socket(PF_UNIX, SOCK_DGRAM, IPPROTO_SWIFT);
53 test(rc < 0 && errno == EINVAL);
56 /* Use invalid type when calling socket. */
57 static void socket_invalid_type(void)
61 rc = socket(PF_INET, SOCK_STREAM, IPPROTO_SWIFT);
63 test(rc < 0 && errno == EINVAL);
66 /* Use invalid protocol when calling socket. */
67 static void socket_invalid_protocol(void)
71 rc = socket(PF_INET, SOCK_DGRAM, -1);
73 test(rc < 0 && errno == EINVAL);
77 * Use dup to fill the number of file descriptors for current process.
78 * Calling socket must result in error.
80 * File descriptors are not closed. Test processes must be restarted.
82 static void socket_insufficient_file_descriptors(void)
88 /* Duplicate standard output. */
89 fd = dup(STDOUT_FILENO);
94 rc = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
96 dprintf("errno = %d\n", errno);
97 test(rc < 0 && errno == EMFILE);
100 /* Valid call of socket. */
101 static void socket_ok(void)
105 rc = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
106 dprintf("rc = %d, errno = %d\n", rc, errno);