/* DESC: This script implements a TCP server which is able to receive messages. * Copyright (C) 2012 NetModule AG, Switzerland */ MAX_CONNECTIONS = 1; void usage() { printf("usage: tcpserver.are <port>\n"); exit(1); } if (argc < 2) { usage(); } port = (int) argv[1]; timeout = 10; sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock < 0) { printf("Unable to open socket\n"); exit(1); } ret = bind(sock, port, ""); if (ret == -1) { printf("Unable to bind port %d\n", port); close(sock); exit(1); } ret = listen(sock, MAX_CONNECTIONS); if (ret == -1) { printf("Unable to listen\n"); close(sock); exit(1); } printf("Listening for connections on port %d\n", port); quit = 0; while (!quit) { client = accept(sock); if (client < 0) { printf("accept failed\n"); sleep(1); continue; } printf("New client connected\n"); while (1) { /* wait for socket data */ rv = select(client, timeout); if (rv == -1) { printf("Error during select()\n"); close(sock); exit(1); } else if (rv == 0) { //printf("timeout\n"); } else { // one or both of the descriptors have data msg = recv(client); if (left(msg,4) == "quit") { printf("received quit, terminating\n"); quit = 1; break; } if (left(msg,3) == "bye"){ printf("received bye, closing connection...\n"); break; } else if (msg != "") { printf("rcvd: '%s'\n", msg); } } } close(client); } close(sock); exit(0);