[Assorted-commits] SF.net SVN: assorted: [187] throttled-repeater/trunk/src/main.c
Brought to you by:
yangzhang
From: <yan...@us...> - 2007-11-19 07:07:44
|
Revision: 187 http://assorted.svn.sourceforge.net/assorted/?rev=187&view=rev Author: yangzhang Date: 2007-11-18 23:07:47 -0800 (Sun, 18 Nov 2007) Log Message: ----------- - fixed the ECONNRESET handling bug - fixed stdout/stderr ordering by disabling stdout buffering Modified Paths: -------------- throttled-repeater/trunk/src/main.c Modified: throttled-repeater/trunk/src/main.c =================================================================== --- throttled-repeater/trunk/src/main.c 2007-11-19 07:07:21 UTC (rev 186) +++ throttled-repeater/trunk/src/main.c 2007-11-19 07:07:47 UTC (rev 187) @@ -15,7 +15,7 @@ void error(char *msg) { perror(msg); - exit(0); + exit(1); } int main(int argc, char *argv[]) { @@ -24,26 +24,28 @@ // init // + // disable buffering + setbuf(stdout, NULL); + + // check arguments if (argc != 7) { fprintf(stderr, "usage: %s hostname port file period numlines initmsg\n", argv[0]); return 1; } + // open the data file FILE * infile = fopen(argv[3], "r"); if (infile == NULL) error("ERROR file does not exist"); + char * initmsg = argv[6]; + // initialize address int port = atoi(argv[2]); - int sockfd = -1; - struct hostent *server = gethostbyname(argv[1]); if (server == NULL) { - fprintf(stderr,"ERROR, no such host\n"); + fprintf(stderr, "ERROR, no such host\n"); return 1; } - - int backoff = 1000; // XXX 5000; - struct sockaddr_in serv_addr; bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; @@ -52,18 +54,22 @@ server->h_length); serv_addr.sin_port = htons(port); + // initialize buffer int buffer_size = 8192; char buffer[buffer_size]; bzero(buffer, buffer_size); - int numlines = atoi(argv[5]), numlines_consumed = 0; - + // initialize timing state long long period = atoll(argv[4]); long long last_woke = INT64_MAX; - char * initmsg = argv[6]; + // initialize constants + int backoff = 5000; + // initialize misc state int connected = 0; + int numlines = atoi(argv[5]), numlines_consumed = 0; + int sockfd = -1; // // main loop @@ -109,7 +115,8 @@ error("ERROR opening socket"); } if (connect(sockfd, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == 0) { - char initmsg_newline[strlen(initmsg) + 1]; + // connected + char initmsg_newline[strlen(initmsg) + 2]; strcpy(initmsg_newline, initmsg); strcat(initmsg_newline, "\n"); puts("connected"); @@ -125,6 +132,7 @@ } } } else { + // couldn't connect if (errno != ECONNREFUSED) { fprintf(stderr, "sockfd = %d\n", sockfd); error("ERROR connecting"); @@ -134,8 +142,8 @@ usleep(backoff * 1000); } if (send(sockfd, start, end - start, MSG_NOSIGNAL) < 0) { - if (errno == EPIPE) { - fputs("got EPIPE writing to socket\n", stderr); + if (errno == EPIPE || errno == ECONNRESET) { + perror("connection closed"); close(sockfd); sockfd = -1; connected = 0; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |