#include #include #include #include #include #include #include #include int port = 8000; int one = 1; struct sockaddr_in lst_a; int lst_fd, srv_fd; int lbuf; char buf[1024]; void die_msg(const char *msg) { if (msg) fprintf(stderr, "%s\n", msg); exit(1); } void die_err(const char *msg) { perror(msg); exit(1); } int main(int argc, char **argv) { if (argc > 1) port = atol(argv[1]); if ((lst_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) die_err("socket"); if ((setsockopt(lst_fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one))) == -1) die_err("setsockopt"); bzero((char *)&lst_a, sizeof(lst_a)); lst_a.sin_family = AF_INET; lst_a.sin_addr.s_addr = htonl(INADDR_ANY); lst_a.sin_port = htons(port); if (bind(lst_fd, (struct sockaddr *)&lst_a, sizeof(lst_a)) == -1) die_err("bind"); if (listen(lst_fd, 1) == -1) die_err("listen"); if ((srv_fd = accept(lst_fd, NULL, NULL)) == -1) die_err("accept"); fprintf(stderr, "accept() returns %d\n", srv_fd); if ((lbuf = recv(srv_fd, buf, sizeof(buf), 0)) == -1) die_err("recv"); fprintf(stderr, "recv() returns %d\n", lbuf); /* now let's pretend some processing time. If the sender sends any more * data during the sleep(), it causes the response to be truncated. */ sleep(1); send(srv_fd, "block1\n", 7, 0); send(srv_fd, "block2\n", 7, 0); //shutdown(srv_fd, SHUT_WR); close(srv_fd); return 0; }