aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/akcom-udpecho.c55
1 files changed, 27 insertions, 28 deletions
diff --git a/src/akcom-udpecho.c b/src/akcom-udpecho.c
index d42c809..6e6cdaa 100644
--- a/src/akcom-udpecho.c
+++ b/src/akcom-udpecho.c
@@ -128,6 +128,7 @@ struct udp_echo_plus
128 uint32_t reply_time; 128 uint32_t reply_time;
129 uint32_t failures; 129 uint32_t failures;
130 uint32_t iteration; 130 uint32_t iteration;
131 uint8_t bytes[];
131}; 132};
132 133
133 134
@@ -345,37 +346,45 @@ main(
345 return(1); 346 return(1);
346 }; 347 };
347 348
348 349 // adjust defaults
349 // allocate buffer
350 if ((fd = open("/dev/urandom", O_RDONLY)) == -1)
351 {
352 fprintf(stderr, "%s: open(/dev/urandom): %s\n", prog_name, strerror(errno));
353 return(1);
354 };
355 if (cnf_packetsize < sizeof(struct udp_echo_plus)) 350 if (cnf_packetsize < sizeof(struct udp_echo_plus))
356 cnf_packetsize = sizeof(struct udp_echo_plus); 351 cnf_packetsize = sizeof(struct udp_echo_plus);
357 if ((sndbuff.data = malloc(cnf_packetsize)) == NULL) 352
353 // allocate receive buffer
354 if ((rcvbuff.data = malloc(cnf_packetsize)) == NULL)
358 { 355 {
359 fprintf(stderr, "%s: out of virtual memory\n", prog_name); 356 fprintf(stderr, "%s: out of virtual memory\n", prog_name);
360 close(fd);
361 return(1); 357 return(1);
362 }; 358 };
363 if ((rcvbuff.data = malloc(cnf_packetsize)) == NULL) 359
360 // allocate send buffer
361 if ((sndbuff.data = malloc(cnf_packetsize)) == NULL)
364 { 362 {
365 fprintf(stderr, "%s: out of virtual memory\n", prog_name); 363 fprintf(stderr, "%s: out of virtual memory\n", prog_name);
366 close(fd); 364 free(rcvbuff.data);
367 return(1); 365 return(1);
368 }; 366 };
369 if ((size = read(fd, sndbuff.data, cnf_packetsize)) == -1) 367 memset(sndbuff.data, 0, sizeof(struct udp_echo_plus));
368 sndbuff.echoplus->iteration = htonl(1);
369 if (cnf_packetsize > sizeof(struct udp_echo_plus))
370 { 370 {
371 fprintf(stderr, "%s: read(): %s\n", prog_name, strerror(errno)); 371 if ((fd = open("/dev/urandom", O_RDONLY)) == -1)
372 {
373 fprintf(stderr, "%s: open(/dev/urandom): %s\n", prog_name, strerror(errno));
374 free(rcvbuff.data);
375 free(sndbuff.data);
376 return(1);
377 };
378 if (read(fd, sndbuff.echoplus->bytes, cnf_packetsize-sizeof(struct udp_echo_plus)) == -1)
379 {
380 fprintf(stderr, "%s: read(): %s\n", prog_name, strerror(errno));
381 close(fd);
382 free(sndbuff.data);
383 free(rcvbuff.data);
384 return(1);
385 };
372 close(fd); 386 close(fd);
373 free(sndbuff.data);
374 free(rcvbuff.data);
375 return(1);
376 }; 387 };
377 close(fd);
378 bzero(sndbuff.data, sizeof(struct udp_echo_plus));
379 388
380 389
381 // resolve host 390 // resolve host
@@ -420,16 +429,6 @@ main(
420 start.tv_sec -= cnf_interval; 429 start.tv_sec -= cnf_interval;
421 epoch = 0; 430 epoch = 0;
422 431
423
424 // set packet information
425 sndbuff.echoplus->req_sn = 0;
426 sndbuff.echoplus->res_sn = 0;
427 sndbuff.echoplus->recv_time = 0;
428 sndbuff.echoplus->reply_time = 0;
429 sndbuff.echoplus->failures = 0;
430 sndbuff.echoplus->iteration = htonl(1);
431
432
433 // master loop 432 // master loop
434 while (!(should_stop)) 433 while (!(should_stop))
435 { 434 {