#include #include #include #include #include #include #include #include #define DATA "exit" int main(int argc, char *argv[]){ int sock; socklen_t length; struct sockaddr_in server; int msgsock; char buf[1024]; int rval; sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == -1){ perror("opening stream socket"); exit(1); } server.sin_family = AF_INET; server.sin_addr.s_addr = htoml(INADDR_ANY; if(argc == 2){ server.sin_port = htons(atoi(argv[1])); } else{ server.sin_port = 0; } if(bind(sock, (struct sockaddr *) &server, sizeof server) == -1){ perror("binding stream socket"); exit(1); } length = sizeof server; if(getsockname(sock,(struct sockaddr *) &server, &length) == -1){ perror("getting socket name"); exit(1); } printf("socket port %d\n", ntohs(server.sin_port)); listen(sock, 5); do{ if((msgsock = accept(sock,(struct sockaddr *) NULL, (socklen_t *) NULL)) == -1){ perror("accept"); } else do{ memset(buf,0,sizeof buf); if((rval = read(msgsock, buf, 1024)) == -1) perror("reading stream message"); dprintf(1, "-[%d]\n", rval); if(rval == 0){ printf("connecting finished\n"); } else{ dprintf(1,"[%s]\n", buf); } }while((rval > 0) && (strcmp(buf,FIN))); close(msgsock); }while(strcmp(buf,FIN)); exit(0); }