/* gcc socket_server.c -lnsl -lsocket -o socket_server */ #include #include #include #include main(argc,argv) int argc; char **argv; { int sock,fd,len,n; struct sockaddr_in server; char buff[1024]; /* Create a socket */ sock=socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("opening socket"); exit(1);} /* Set server address family */ server.sin_family=AF_INET; /* Set the requesting client's address to INADDRR_ANY, no limitations */ server.sin_addr.s_addr=INADDR_ANY; /* Port 6500 */ server.sin_port=ntohs(6500); len = sizeof(server); /* bind a server to a socket */ if (bind(sock,(struct sockaddr *) &server, len) < 0) { perror("binding"); exit(1); } /* If systems decides the ports to be used then getsockname can be used */ if (getsockname(sock,(struct sockaddr *) &server, &len) < 0) { perror("getting name"); exit(1); } /* Print port number and tell it to a client */ /* ntohs() function converts the short integer netshort */ /* from network byte order to host byte order. */ printf("Client can send now the data to port #%d\n", ntohs(server.sin_port)); /* Start listening a socket, create a queue of 5 requests */ listen(sock,5); do{ /* Accept a request, and create socket for it */ fd=accept(sock,(struct sockaddr *)0,(int *)0); if (fd == -1) {perror("accept fd");exit(1);} else do { /* read a socket, n is number of bytes succesfully read */ n=read(fd,buff,1024); if (n < 0) perror("read socket"); else if (n==0) printf("EOF received.\n"); else printf("> %s\n",buff); }while(n > 0); /* close a socket and wait for a new request */ close(fd); }while(1); }