/* * TCP/IP server program * Usage: ./server host_name & */ #include #include #include #include #include #define PORTNO 50001 /* port No. of the socket */ char mesg[] = "hello, world\n"; main(int argc, char *argv[]) { struct sockaddr_in server_addr; /* socked address */ struct sockaddr_in client_addr; struct hostent *host_entry; /* host address information */ int server_sid, client_sid; /* session id of the socket */ int client_size; /* commandline argument check */ if (argc != 2) { fprintf(stderr, "argument mismatch\n"); exit(1); } /* create a socket */ if ((server_sid = socket(AF_INET, SOCK_STREAM, 0)) == -1) { fprintf(stderr, "could not make socket\n"); exit(1); } /* get host ip address */ if ((host_entry = gethostbyname(argv[1])) == NULL) { fprintf(stderr, "cold not find host\n"); exit(1); } /* assign a name to the socket */ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORTNO); memcpy((char *)&server_addr.sin_addr, (char *)host_entry->h_addr, host_entry->h_length); if (bind(server_sid, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { fprintf(stderr, "could not assign a name to the socket\n"); exit(1); } /* listen */ if (listen(server_sid, 5) == -1) { fprintf(stderr, "listen error\n"); exit(1); } while(1) { /* accept */ client_size = sizeof(client_addr); if ((client_sid = accept(server_sid, (struct sockaddr *)&client_addr, &client_size)) == -1) { fprintf(stderr, "accept error\n"); exit(1); } /* send message */ if (send(client_sid, mesg, sizeof(mesg), 0) == -1) { fprintf(stderr, "send error\n"); exit(1); } /* shutdown client socket */ if (shutdown(client_sid, 2) == -1) { fprintf(stderr, "shutdown error\n"); exit(1); } close(client_sid); } }