1 #include <ccan/oserver/oserver.h>
2 #include <ccan/read_write_all/read_write_all.h>
4 #include <sys/socket.h>
5 #include <netinet/in.h>
6 #include <netinet/tcp.h>
14 void oserver_serve(int fd)
19 for (i = 0; i < sizeof(buf)-1; i++) {
20 if (read(fd, &buf[i], 1) != 1)
21 errx(1, "Client disconnected");
22 if (buf[i] == '\n' || buf[i] == '\r')
24 buf[i] = toupper(buf[i]);
28 if (!write_all(fd, "Louder, like this: '",
29 strlen("Louder, like this: '"))
30 || !write_all(fd, buf, i)
31 || !write_all(fd, "'\r\n", strlen("'\r\n")))
32 err(1, "Write failed");
36 int oserver_setup(void)
42 struct sockaddr_in in;
45 sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
47 err(1, "Creating TCP socket");
49 if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)))
50 warn("Setting socket reuse");
52 u.in.sin_family = AF_INET;
53 u.in.sin_port = htons(OSERVER_PORT);
54 u.in.sin_addr.s_addr = INADDR_ANY;
55 if (bind(sockfd, &u.addr, sizeof(u.in)) == -1)
56 err(1, "Binding TCP socket");
58 if (listen(sockfd, 0) != 0)
59 err(1, "Listening on TCP socket");