/* ** Echo server; demonstrates internet sockets */ #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int s, s2, t, len, portno; struct sockaddr_in local, remote; char str[100]; if(argc < 2){ fprintf(stderr, "Format: PORT_NUMBER\n"); exit(1); } portno = atoi(argv[1]); if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } bzero((char *)&local, sizeof(local)); local.sin_family = AF_INET; local.sin_addr.s_addr = INADDR_ANY; local.sin_port = htons(portno); if (bind(s, (struct sockaddr *)&local, sizeof(local)) < 0) { perror("bind"); exit(1); } if (listen(s, 5) == -1) { perror("listen"); exit(1); } for(;;) { int done, n; printf("Waiting for a connection...\n"); t = sizeof(remote); if ((s2 = accept(s, (struct sockaddr *)&remote, &t)) < 0) { perror("accept"); exit(1); } printf("Connected.\n"); done = 0; do { n = read(s2, str, 100); if (n <= 0) { if (n < 0) perror("recv"); done = 1; } if (!done) if (write(s2, str, n) < 0) { perror("send"); done = 1; } } while (!done); close(s2); } return 0; }