#include #include /* For struct sockaddr, socket, accept, listen, bind */ #include /* For struct sockaddr_in */ #include /* For htons, htonl, inet_pton */ #include #include #include /* For errno */ #include #include /* For close, read, write */ int main (int argc, char * argv []) { uint16_t port = 12345; if (argc > 1) port = strtoul(argv[1], NULL, 10); struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = htonl(INADDR_ANY); int srv = socket(AF_INET, SOCK_STREAM, 0); if (srv < 0) { perror("could not create socket"); return EXIT_FAILURE; } if (bind(srv, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("could not bind local address"); close(srv); return EXIT_FAILURE; } if (listen(srv, 10) < 0) { perror("could not set server socket as passive socket"); close(srv); return EXIT_FAILURE; }; int conn = accept(srv, NULL, NULL); if (conn < 0) { perror("could not accept connection"); close(srv); return EXIT_FAILURE; } close(srv); for (;;) { char buffer[4096]; ssize_t len = read(conn, buffer, 4096); if (len < 0) { perror("could not read from connection"); close(conn); return EXIT_FAILURE; } else if (len == 0) { close(conn); return EXIT_SUCCESS; } fwrite(buffer, len, 1, stdout); } }