#include #include #include #include #include #include #include #include #include volatile int serversock, sock; void kill_me(int sig) { close(serversock); close(sock); exit(1); } #define PORT 12345 /** binds to port PORT and prints everything received that is not the ascii-letter a */ int main(int argc, char **argv) { signal(SIGINT, kill_me); serversock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if (serversock == -1) { perror("Error creating socket"); exit(1); } int on = 1; if (setsockopt(serversock, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on)) == -1) { perror("Setsockopt"); exit(1); } struct sockaddr_in server = {0}; server.sin_family = AF_INET; server.sin_addr.s_addr = htonl(INADDR_ANY); server.sin_port = htons(PORT); if (bind(serversock, (struct sockaddr *) &server, sizeof(server)) == -1) { perror("Error binding socket"); exit(1); } if (listen(serversock, 2) == -1) { perror("Listening for connection"); exit(1); } while (1) { struct sockaddr_in client; int sock; unsigned int clientlen = sizeof(client); /* Wait for client connection */ sock = accept(serversock, (struct sockaddr *) &client, &clientlen); if (sock == -1) { perror("Accepting connection"); exit(1); } int n; do { sleep(1); char buf[20001]; n = recv(sock, buf, 20000, 0); if (n == -1) { perror("Failed..."); if (!(errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)) break; } int i; for (i = 0; i < n; ++i) { if (buf[i] != 'a') putchar(buf[i]); } } while(n); close(sock); } close(serversock); }