int main(int argc, char** argv) { int serverSocket; //Socket descriptor for server int clientSocket; //Socket descriptor for client struct sockaddr_in echoServerAddr; //local address struct sockaddr_in echoClientAddr; //client address unsigned short echoServerPort; //server port unsigned int clientLen; //length of client address data structure // if(argc != 2){ // fprintf(stderr, "Usage %s <Server Port>\n", argv[0]); // exit(1); // } echoServerPort = PORT; //create socket for incoming connections if((serverSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){ dieWithError("socket() failed"); } //construct local address structure memset(&echoServerAddr, 0, sizeof(echoServerAddr)); //zero out structure echoServerAddr.sin_family = AF_INET; //internet address family echoServerAddr.sin_addr.s_addr = htonl(INADDR_ANY); //any incoming interface echoServerAddr.sin_port = htons(echoServerPort); //local port //bind to the local address if(bind(serverSocket, (struct sockaddr*)&echoServerAddr, sizeof(echoServerAddr)) < 0){ dieWithError("bind() failed"); } //mark the socket so it will listen for incoming connections if(listen(serverSocket, MAXPENDING) < 0){ dieWithError("listen() failed"); } //set the size of the in-out parameter clientLen = sizeof(echoClientAddr); //wait for client to connect if((clientSocket = accept(serverSocket, (struct sockaddr*)&echoClientAddr, &clientLen)) < 0){ dieWithError("accept() failed"); } //clientSocket is connected to a client printf("Handling client %s\n", inet_ntoa(echoClientAddr.sin_addr)); handleTCPClient(clientSocket); }
int main( int argc, char **argv ) { typedef enum Boolean { false, true } Boolean; Boolean finished = false; char buffer[1024]; in_port_t listenPort; int serverSock; static const char *version = "0.0.1"; static const char *phase = "prealpha"; struct sockaddr_in serverAddr; if (argc != 2) usage(argv[0]); listenPort = atoi(argv[1]); printf("tcpserver -- TCP-based protocol development harness (server) v%s-%s\n", version, phase); printf("Written by [email protected] -- Released under BSD3\n\n"); if ((serverSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) error("socket()"); memset(&serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); serverAddr.sin_port = htons(listenPort); if (bind(serverSock, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0) sysError("bind()"); if (listen(serverSock, _TCPDEV_MAXCONN) < 0) sysError("listen()"); while (!finished) { struct sockaddr_in clientAddr; socklen_t clientAddrLength = sizeof(clientAddr); int clientSock = accept(serverSock, (struct sockaddr *) &clientAddr, &clientAddrLength); if (clientSock < 0) sysError("accept()"); char clientName[INET_ADDRSTRLEN]; if (inet_ntop(AF_INET, &clientAddr.sin_addr.s_addr, clientName, sizeof(clientName)) != NULL) { printf("[+] inbound client: %s:%d\n", clientName, ntohs(clientAddr.sin_port)); } else { printf("cannot get client address\n"); } handleTCPClient(clientSock); } return 0; }