success("server: finished\n");
}
-static int udp_socket(void)
-{
- int on = 1;
- struct sockaddr_in addr = {
- .sin_family = AF_INET,
- .sin_addr = {htonl(INADDR_LOOPBACK)},
- .sin_port = 0
- };
- int fd;
-
- fd = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
- setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on));
-#if defined(SO_REUSEPORT)
- setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, (char*)&on, sizeof(on));
-#endif
- if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
- perror("bind");
- exit(EXIT_FAILURE);
- }
-
- return fd;
-}
-
-static void udp_connect(int fd1, int fd2)
-{
- struct sockaddr_in addr;
- socklen_t addrlen = sizeof(addr);
-
- if (getsockname(fd1, &addr, &addrlen) < 0) {
- perror("getsockname");
- exit(EXIT_FAILURE);
- }
-
- if (connect(fd2, &addr, addrlen) < 0) {
- perror("connect");
- exit(EXIT_FAILURE);
- }
-}
-
-static int udp_socketpair(int *fd)
-{
- fd[0] = udp_socket();
- fd[1] = udp_socket();
-
- udp_connect(fd[0], fd[1]);
- udp_connect(fd[1], fd[0]);
-
- return 0;
-}
void doit(void)
{
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
+#include <netinet/in.h>
+#include <sys/types.h>
+#include <sys/socket.h>
#include "utils.h"
return error_count ? 1 : 0;
}
+
+static int udp_socket(void)
+{
+ int on = 1;
+ struct sockaddr_in addr = {
+ .sin_family = AF_INET,
+ .sin_addr = {htonl(INADDR_LOOPBACK)},
+ .sin_port = 0
+ };
+ int fd;
+
+ fd = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
+ setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on));
+#if defined(SO_REUSEPORT)
+ setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, (char*)&on, sizeof(on));
+#endif
+
+ if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+ perror("bind");
+ exit(EXIT_FAILURE);
+ }
+
+ return fd;
+}
+
+static void udp_connect(int fd1, int fd2)
+{
+ struct sockaddr_in addr;
+ socklen_t addrlen = sizeof(addr);
+
+ if (getsockname(fd1, &addr, &addrlen) < 0) {
+ perror("getsockname");
+ exit(EXIT_FAILURE);
+ }
+
+ if (connect(fd2, &addr, addrlen) < 0) {
+ perror("connect");
+ exit(EXIT_FAILURE);
+ }
+}
+
+int udp_socketpair(int *fd)
+{
+ fd[0] = udp_socket();
+ fd[1] = udp_socket();
+
+ udp_connect(fd[0], fd[1]);
+ udp_connect(fd[1], fd[0]);
+
+ return 0;
+}
extern void hexprint(const void *str, size_t len);
extern void binprint(const void *str, size_t len);
+int udp_socketpair(int *fd);
+
/* This must be implemented elsewhere. */
extern void doit(void);