fix: check icmp_send_echo return and fix tracker ordering
This commit is contained in:
parent
2ab904f106
commit
de8d7e749b
1 changed files with 26 additions and 9 deletions
|
|
@ -1,5 +1,11 @@
|
||||||
|
#include <errno.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "version_gen.h"
|
||||||
|
#include "icmp.h"
|
||||||
#include "internal/ping/output.h"
|
#include "internal/ping/output.h"
|
||||||
#include "internal/ping/scheduler.h"
|
#include "internal/ping/scheduler.h"
|
||||||
#include "ping/ft_ping_const.h"
|
#include "ping/ft_ping_const.h"
|
||||||
|
|
@ -14,10 +20,17 @@ void
|
||||||
do_send(struct ping_state *state, size_t payload_len)
|
do_send(struct ping_state *state, size_t payload_len)
|
||||||
{
|
{
|
||||||
state->send_flag = 0;
|
state->send_flag = 0;
|
||||||
ping_send_one(state, payload_len);
|
if (0 != ping_send_one(state, payload_len))
|
||||||
|
dprintf(STDERR_FILENO, "%s: %s\n",
|
||||||
|
g_prog_name.name, icmp_strerror(state->handle));
|
||||||
if (HAS_FLAG(state->config->flags, FLAG_FLOOD))
|
if (HAS_FLAG(state->config->flags, FLAG_FLOOD))
|
||||||
ping_output_flood_dot();
|
ping_output_flood_dot();
|
||||||
ping_scheduler_arm(state->config);
|
if (0 != ping_scheduler_arm(state->config))
|
||||||
|
{
|
||||||
|
dprintf(STDERR_FILENO, "%s: setitimer: %s\n",
|
||||||
|
g_prog_name.name, strerror(errno));
|
||||||
|
state->stop_flag = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
@ -25,17 +38,21 @@ ping_send_one(struct ping_state *state, size_t payload_len)
|
||||||
{
|
{
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
uint8_t payload[MAX_PACKET_SIZE];
|
uint8_t payload[MAX_PACKET_SIZE];
|
||||||
|
uint16_t seq;
|
||||||
|
|
||||||
fill_payload(payload, payload_len);
|
fill_payload(payload, payload_len);
|
||||||
icmp_get_time(&ts);
|
if (0 != icmp_get_time(&ts))
|
||||||
ping_tracker_record_send(state->tracker, state->seq, &ts);
|
return -1;
|
||||||
return icmp_send_echo(state->handle,
|
seq = state->seq++;
|
||||||
|
if (0 != icmp_send_echo(state->handle,
|
||||||
state->dest,
|
state->dest,
|
||||||
state->id,
|
state->id,
|
||||||
state->seq++,
|
seq,
|
||||||
state->config->ttl,
|
state->config->ttl,
|
||||||
payload, payload_len);
|
payload, payload_len))
|
||||||
|
return -1;
|
||||||
|
ping_tracker_record_send(state->tracker, seq, &ts);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue