1
0
Fork 0

Adding upstream version 2.8.0.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-09 09:02:26 +01:00
parent 504f85aa2e
commit 48f4eeaece
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
9 changed files with 197 additions and 76 deletions

24
CHANGES
View file

@ -1,3 +1,27 @@
2021-11-02 Jerry Lundström
Release 2.8.0
This release fixes response handling for DNS-over-HTTPS when multiple
responses are received within the same receive cycle, and adds a new
option to suppress some of the normal and verbose output.
The network model within dnsperf and resperf can not process more then
one response at a time from a protocol module, so a buffer has been added
to the DNS-over-HTTPS module to handle this situation (this already exists
in all other modules).
The new option `-O suppress=<message,...>` can selectively suppress parts
of the normal and verbose output. Some of these messages might be
excessively displayed due to the network model and depending on what
protocol you use which makes usage harder then necessary. For example
during TCP connection stage, if you end-point is slow to establish
connection you will get a lot of output saying that the socket isn't ready
yet.
6a452b0 DoH response handling
e2828e7 Suppress
2021-09-17 Jerry Lundström 2021-09-17 Jerry Lundström
Release 2.7.1 Release 2.7.1

20
configure vendored
View file

@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for dnsperf 2.7.1. # Generated by GNU Autoconf 2.69 for dnsperf 2.8.0.
# #
# Report bugs to <admin@dns-oarc.net>. # Report bugs to <admin@dns-oarc.net>.
# #
@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='dnsperf' PACKAGE_NAME='dnsperf'
PACKAGE_TARNAME='dnsperf' PACKAGE_TARNAME='dnsperf'
PACKAGE_VERSION='2.7.1' PACKAGE_VERSION='2.8.0'
PACKAGE_STRING='dnsperf 2.7.1' PACKAGE_STRING='dnsperf 2.8.0'
PACKAGE_BUGREPORT='admin@dns-oarc.net' PACKAGE_BUGREPORT='admin@dns-oarc.net'
PACKAGE_URL='https://github.com/DNS-OARC/dnsperf/issues' PACKAGE_URL='https://github.com/DNS-OARC/dnsperf/issues'
@ -1360,7 +1360,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures dnsperf 2.7.1 to adapt to many kinds of systems. \`configure' configures dnsperf 2.8.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1431,7 +1431,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of dnsperf 2.7.1:";; short | recursive ) echo "Configuration of dnsperf 2.8.0:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@ -1570,7 +1570,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
dnsperf configure 2.7.1 dnsperf configure 2.8.0
generated by GNU Autoconf 2.69 generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc. Copyright (C) 2012 Free Software Foundation, Inc.
@ -1939,7 +1939,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by dnsperf $as_me 2.7.1, which was It was created by dnsperf $as_me 2.8.0, which was
generated by GNU Autoconf 2.69. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@ $ $0 $@
@ -2802,7 +2802,7 @@ fi
# Define the identity of the package. # Define the identity of the package.
PACKAGE='dnsperf' PACKAGE='dnsperf'
VERSION='2.7.1' VERSION='2.8.0'
cat >>confdefs.h <<_ACEOF cat >>confdefs.h <<_ACEOF
@ -14410,7 +14410,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by dnsperf $as_me 2.7.1, which was This file was extended by dnsperf $as_me 2.8.0, which was
generated by GNU Autoconf 2.69. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@ -14477,7 +14477,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\ ac_cs_version="\\
dnsperf config.status 2.7.1 dnsperf config.status 2.8.0
configured by $0, generated by GNU Autoconf 2.69, configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\" with options \\"\$ac_cs_config\\"

View file

@ -16,7 +16,7 @@
# limitations under the License. # limitations under the License.
AC_PREREQ(2.64) AC_PREREQ(2.64)
AC_INIT([dnsperf], [2.7.1], [admin@dns-oarc.net], [dnsperf], [https://github.com/DNS-OARC/dnsperf/issues]) AC_INIT([dnsperf], [2.8.0], [admin@dns-oarc.net], [dnsperf], [https://github.com/DNS-OARC/dnsperf/issues])
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects])
AC_CONFIG_SRCDIR([src/dnsperf.c]) AC_CONFIG_SRCDIR([src/dnsperf.c])
AC_CONFIG_HEADER([src/config.h]) AC_CONFIG_HEADER([src/config.h])

View file

@ -397,6 +397,23 @@ The URI to use for DNS-over-HTTPS, default value is
The HTTP method to use when querying with DNS-over-HTTPS, default is GET. The HTTP method to use when querying with DNS-over-HTTPS, default is GET.
Available methods are: GET, POST. Available methods are: GET, POST.
.RE .RE
\fBsuppress=\fIMESSAGE[,MESSAGE,...]\fR
.br
.RS
Suppress various messages and warnings that may be shown excessively in some
situations, such as socket readiness when connecting to a slow service.
Can suppress multiple types by listing them as a comma separated list.
Following type are available.
\fBtimeouts\fR: Suppress messages about queries being timed out
.br
\fBcongestion\fR: Suppress messages about network congestion
.br
\fBsendfailed\fR: Suppress messages about failure to send packets or if only parts of the packet were sent
.br
\fBsockready\fR: Suppress messages about socket readiness
.RE
.SH "SEE ALSO" .SH "SEE ALSO"
\fBresperf\fR(1) \fBresperf\fR(1)
.SH AUTHOR .SH AUTHOR

View file

@ -88,6 +88,7 @@ typedef struct {
bool updates; bool updates;
bool verbose; bool verbose;
enum perf_net_mode mode; enum perf_net_mode mode;
perf_suppress_t suppress;
} config_t; } config_t;
typedef struct { typedef struct {
@ -410,6 +411,7 @@ setup(int argc, char** argv, config_t* config)
const char* mode = 0; const char* mode = 0;
const char* doh_uri = DEFAULT_DOH_URI; const char* doh_uri = DEFAULT_DOH_URI;
const char* doh_method = DEFAULT_DOH_METHOD; const char* doh_method = DEFAULT_DOH_METHOD;
const char* local_suppress = 0;
memset(config, 0, sizeof(*config)); memset(config, 0, sizeof(*config));
config->argc = argc; config->argc = argc;
@ -487,6 +489,8 @@ setup(int argc, char** argv, config_t* config)
"the URI to use for DNS-over-HTTPS", DEFAULT_DOH_URI, &doh_uri); "the URI to use for DNS-over-HTTPS", DEFAULT_DOH_URI, &doh_uri);
perf_long_opt_add("doh-method", perf_opt_string, "doh_method", perf_long_opt_add("doh-method", perf_opt_string, "doh_method",
"the HTTP method to use for DNS-over-HTTPS: GET or POST", DEFAULT_DOH_METHOD, &doh_method); "the HTTP method to use for DNS-over-HTTPS: GET or POST", DEFAULT_DOH_METHOD, &doh_method);
perf_long_opt_add("suppress", perf_opt_string, "message[,message,...]",
"suppress messages/warnings, see man-page for list of message types", NULL, &local_suppress);
bool log_stdout = false; bool log_stdout = false;
perf_opt_add('W', perf_opt_boolean, NULL, "log warnings and errors to stdout instead of stderr", NULL, &log_stdout); perf_opt_add('W', perf_opt_boolean, NULL, "log warnings and errors to stdout instead of stderr", NULL, &log_stdout);
@ -497,6 +501,8 @@ setup(int argc, char** argv, config_t* config)
perf_log_tostdout(); perf_log_tostdout();
} }
config->suppress = perf_opt_parse_suppress(local_suppress);
if (mode != 0) if (mode != 0)
config->mode = perf_net_parsemode(mode); config->mode = perf_net_parsemode(mode);
@ -695,14 +701,14 @@ do_send(void* arg)
q->sock = tinfo->socks[tinfo->current_sock++ % tinfo->nsocks]; q->sock = tinfo->socks[tinfo->current_sock++ % tinfo->nsocks];
switch (perf_net_sockready(q->sock, threadpipe[0], TIMEOUT_CHECK_TIME)) { switch (perf_net_sockready(q->sock, threadpipe[0], TIMEOUT_CHECK_TIME)) {
case 0: case 0:
if (config->verbose) { if (config->verbose && !config->suppress.sockready) {
perf_log_warning("socket %p not ready", q->sock); perf_log_warning("socket %p not ready", q->sock);
} }
q->sock = 0; q->sock = 0;
all_fail = false; all_fail = false;
continue; continue;
case -1: case -1:
if (config->verbose) { if (config->verbose && !config->suppress.sockready) {
perf_log_warning("socket %p readiness check timed out", q->sock); perf_log_warning("socket %p readiness check timed out", q->sock);
} }
q->sock = 0; q->sock = 0;
@ -765,12 +771,12 @@ do_send(void* arg)
config->server_addr.length); config->server_addr.length);
if (n < 0) { if (n < 0) {
if (errno == EINPROGRESS) { if (errno == EINPROGRESS) {
if (config->verbose) { if (config->verbose && !config->suppress.congestion) {
perf_log_warning("network congested, packet sending in progress"); perf_log_warning("network congested, packet sending in progress");
} }
any_inprogress = 1; any_inprogress = 1;
} else { } else {
if (config->verbose) { if (config->verbose && !config->suppress.sendfailed) {
char __s[256]; char __s[256];
perf_log_warning("failed to send packet: %s", perf_strerror_r(errno, __s, sizeof(__s))); perf_log_warning("failed to send packet: %s", perf_strerror_r(errno, __s, sizeof(__s)));
} }
@ -780,7 +786,9 @@ do_send(void* arg)
continue; continue;
} }
} else if ((unsigned int)n != length) { } else if ((unsigned int)n != length) {
if (!config->suppress.sendfailed) {
perf_log_warning("failed to send full packet: only sent %d of %u", n, length); perf_log_warning("failed to send full packet: only sent %d of %u", n, length);
}
PERF_LOCK(&tinfo->lock); PERF_LOCK(&tinfo->lock);
query_move(tinfo, q, prepend_unused); query_move(tinfo, q, prepend_unused);
PERF_UNLOCK(&tinfo->lock); PERF_UNLOCK(&tinfo->lock);
@ -827,6 +835,7 @@ process_timeouts(threadinfo_t* tinfo, uint64_t now)
tinfo->stats.num_timedout++; tinfo->stats.num_timedout++;
if (!config->suppress.timeouts) {
if (q->desc != NULL) { if (q->desc != NULL) {
perf_log_printf("> T %s", q->desc); perf_log_printf("> T %s", q->desc);
} else { } else {
@ -834,6 +843,7 @@ process_timeouts(threadinfo_t* tinfo, uint64_t now)
config->updates ? "Update" : "Query", config->updates ? "Update" : "Query",
(unsigned int)(q - tinfo->queries)); (unsigned int)(q - tinfo->queries));
} }
}
q = perf_list_tail(tinfo->outstanding_queries); q = perf_list_tail(tinfo->outstanding_queries);
} while (q != NULL && q->timestamp < now && now - q->timestamp >= config->timeout); } while (q != NULL && q->timestamp < now && now - q->timestamp >= config->timeout);

View file

@ -115,6 +115,9 @@ struct perf__doh_socket {
bool http2_is_dns; bool http2_is_dns;
struct _doh_stats stats; struct _doh_stats stats;
char recvbuf[TCP_RECV_BUF_SIZE];
size_t recv_at;
}; };
static pthread_mutex_t _nghttp2_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t _nghttp2_lock = PTHREAD_MUTEX_INITIALIZER;
@ -291,8 +294,9 @@ static ssize_t perf__doh_recv(struct perf_net_socket* sock, void* buf, size_t le
return -1; return -1;
} }
uint8_t recvbuf[TCP_RECV_BUF_SIZE]; if (self->recv_at < sizeof(self->recvbuf)) {
ssize_t n = SSL_read(self->ssl, recvbuf, TCP_RECV_BUF_SIZE); // try to recv more if we can
ssize_t n = SSL_read(self->ssl, self->recvbuf + self->recv_at, sizeof(self->recvbuf) - self->recv_at);
if (!n) { if (!n) {
perf__doh_reconnect(sock); perf__doh_reconnect(sock);
PERF_UNLOCK(&self->lock); PERF_UNLOCK(&self->lock);
@ -303,8 +307,13 @@ static ssize_t perf__doh_recv(struct perf_net_socket* sock, void* buf, size_t le
int err = SSL_get_error(self->ssl, n); int err = SSL_get_error(self->ssl, n);
switch (err) { switch (err) {
case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_READ:
errno = EAGAIN; if (self->recv_at) {
// did not recv but we got something in buffer
break; break;
}
errno = EAGAIN;
PERF_UNLOCK(&self->lock);
return -1;
case SSL_ERROR_SYSCALL: case SSL_ERROR_SYSCALL:
switch (errno) { switch (errno) {
case ECONNREFUSED: case ECONNREFUSED:
@ -316,25 +325,31 @@ static ssize_t perf__doh_recv(struct perf_net_socket* sock, void* buf, size_t le
default: default:
break; break;
} }
break; PERF_UNLOCK(&self->lock);
return -1;
default: default:
errno = EBADF; errno = EBADF;
break;
}
PERF_UNLOCK(&self->lock); PERF_UNLOCK(&self->lock);
return -1; return -1;
} }
} else {
self->recv_at += n;
}
}
// this will be processed by nghttp2 callbacks // this will be processed by nghttp2 callbacks
int ret = nghttp2_session_mem_recv(self->http2.session, recvbuf, n); ssize_t ret = nghttp2_session_mem_recv(self->http2.session, (uint8_t*)self->recvbuf, self->recv_at);
if (ret < 0) { if (ret < 0) {
perf_log_warning("nghttp2_session_mem_recv failed: %s", nghttp2_strerror(ret)); perf_log_warning("nghttp2_session_mem_recv failed: %s", nghttp2_strerror(ret));
PERF_UNLOCK(&self->lock); PERF_UNLOCK(&self->lock);
return -1; return -1;
} }
// TODO: handle partial mem_recv if (ret != self->recv_at) {
if (ret != n) { // only process one response per call
perf_log_fatal("perf__doh_recv() mem_recv did not take all"); memmove(self->recvbuf, self->recvbuf + ret, self->recv_at - ret);
self->recv_at -= ret;
} else {
self->recv_at = 0;
} }
// TODO: is this faster then mem_recv? // TODO: is this faster then mem_recv?
@ -850,7 +865,9 @@ static int _http2_data_chunk_recv_cb(nghttp2_session* session,
} }
if (self->http2.dnsmsg_completed) { if (self->http2.dnsmsg_completed) {
perf_log_fatal("_http2_data_chunk_recv_cb: chunk received when already having a dns msg"); // pause for now and don't process this chunk
// can only do one response at a time in perf__doh_recv()
return NGHTTP2_ERR_PAUSE;
} }
// TODO: point of nghttp2_session_get_stream_user_data() code? // TODO: point of nghttp2_session_get_stream_user_data() code?

View file

@ -366,3 +366,38 @@ void perf_opt_parse(int argc, char** argv)
exit(1); exit(1);
} }
} }
perf_suppress_t perf_opt_parse_suppress(const char* val)
{
perf_suppress_t s = { false, false, false };
while (val && *val) {
const char* next = strchr(val, ',');
int len;
if (next) {
len = next - val;
next += 1;
} else {
len = strlen(val);
next = 0;
}
if (!strncmp(val, "timeouts", len)) {
s.timeouts = true;
} else if (!strncmp(val, "congestion", len)) {
s.congestion = true;
} else if (!strncmp(val, "sendfailed", len)) {
s.sendfailed = true;
} else if (!strncmp(val, "sockready", len)) {
s.sockready = true;
} else {
fprintf(stderr, "unknown message type to suppress: %.*s\n", len, val);
perf_opt_usage();
exit(1);
}
val = next;
}
return s;
}

View file

@ -20,6 +20,8 @@
#ifndef PERF_OPT_H #ifndef PERF_OPT_H
#define PERF_OPT_H 1 #define PERF_OPT_H 1
#include <stdbool.h>
typedef enum { typedef enum {
perf_opt_string, perf_opt_string,
perf_opt_boolean, perf_opt_boolean,
@ -30,6 +32,13 @@ typedef enum {
perf_opt_port, perf_opt_port,
} perf_opttype_t; } perf_opttype_t;
typedef struct {
bool timeouts;
bool congestion;
bool sendfailed;
bool sockready;
} perf_suppress_t;
void perf_opt_add(char c, perf_opttype_t type, const char* desc, const char* help, const char* defval, void* valp); void perf_opt_add(char c, perf_opttype_t type, const char* desc, const char* help, const char* defval, void* valp);
void perf_long_opt_add(const char* name, perf_opttype_t type, const char* desc, const char* help, const char* defval, void* valp); void perf_long_opt_add(const char* name, perf_opttype_t type, const char* desc, const char* help, const char* defval, void* valp);
@ -38,4 +47,6 @@ void perf_long_opt_usage(void);
void perf_opt_parse(int argc, char** argv); void perf_opt_parse(int argc, char** argv);
perf_suppress_t perf_opt_parse_suppress(const char* val);
#endif #endif

View file

@ -205,6 +205,8 @@ static perf_tsigkey_t* tsigkey;
static bool verbose; static bool verbose;
static unsigned int max_fall_behind; static unsigned int max_fall_behind;
static perf_suppress_t suppress;
const char* progname = "resperf"; const char* progname = "resperf";
static char* static char*
@ -251,6 +253,7 @@ static void setup(int argc, char** argv)
const char* edns_option_str = NULL; const char* edns_option_str = NULL;
const char* doh_uri = DEFAULT_DOH_URI; const char* doh_uri = DEFAULT_DOH_URI;
const char* doh_method = DEFAULT_DOH_METHOD; const char* doh_method = DEFAULT_DOH_METHOD;
const char* local_suppress = 0;
sock_family = AF_UNSPEC; sock_family = AF_UNSPEC;
server_port = 0; server_port = 0;
@ -332,6 +335,8 @@ static void setup(int argc, char** argv)
"the URI to use for DNS-over-HTTPS", DEFAULT_DOH_URI, &doh_uri); "the URI to use for DNS-over-HTTPS", DEFAULT_DOH_URI, &doh_uri);
perf_long_opt_add("doh-method", perf_opt_string, "doh_method", perf_long_opt_add("doh-method", perf_opt_string, "doh_method",
"the HTTP method to use for DNS-over-HTTPS: GET or POST", DEFAULT_DOH_METHOD, &doh_method); "the HTTP method to use for DNS-over-HTTPS: GET or POST", DEFAULT_DOH_METHOD, &doh_method);
perf_long_opt_add("suppress", perf_opt_string, "message[,message,...]",
"suppress messages/warnings, see dnsperf(1) man-page for list of message types", NULL, &local_suppress);
perf_opt_parse(argc, argv); perf_opt_parse(argc, argv);
@ -339,6 +344,8 @@ static void setup(int argc, char** argv)
perf_log_tostdout(); perf_log_tostdout();
} }
suppress = perf_opt_parse_suppress(local_suppress);
if (_mode != 0) if (_mode != 0)
mode = perf_net_parsemode(_mode); mode = perf_net_parsemode(_mode);
@ -574,11 +581,11 @@ do_one_line(perf_buffer_t* lines, perf_buffer_t* msg)
while (q->is_inprogress) { while (q->is_inprogress) {
if (perf_net_sockready(socks[sock], dummypipe[0], TIMEOUT_CHECK_TIME) == -1) { if (perf_net_sockready(socks[sock], dummypipe[0], TIMEOUT_CHECK_TIME) == -1) {
if (errno == EINPROGRESS) { if (errno == EINPROGRESS) {
if (verbose) { if (verbose && !suppress.congestion) {
perf_log_warning("network congested, packet sending in progress"); perf_log_warning("network congested, packet sending in progress");
} }
} else { } else {
if (verbose) { if (verbose && !suppress.sockready) {
char __s[256]; char __s[256];
perf_log_warning("failed to check socket readiness: %s", perf_strerror_r(errno, __s, sizeof(__s))); perf_log_warning("failed to check socket readiness: %s", perf_strerror_r(errno, __s, sizeof(__s)));
} }
@ -603,16 +610,16 @@ do_one_line(perf_buffer_t* lines, perf_buffer_t* msg)
switch (perf_net_sockready(socks[sock], dummypipe[0], TIMEOUT_CHECK_TIME)) { switch (perf_net_sockready(socks[sock], dummypipe[0], TIMEOUT_CHECK_TIME)) {
case 0: case 0:
if (verbose) { if (verbose && !suppress.sockready) {
perf_log_warning("failed to send packet: socket %d not ready", sock); perf_log_warning("failed to send packet: socket %d not ready", sock);
} }
return (PERF_R_FAILURE); return (PERF_R_FAILURE);
case -1: case -1:
if (errno == EINPROGRESS) { if (errno == EINPROGRESS) {
if (verbose) { if (verbose && !suppress.congestion) {
perf_log_warning("network congested, packet sending in progress"); perf_log_warning("network congested, packet sending in progress");
} }
} else { } else if (!suppress.sockready) {
perf_log_warning("failed to send packet: socket %d not ready", sock); perf_log_warning("failed to send packet: socket %d not ready", sock);
} }
return (PERF_R_FAILURE); return (PERF_R_FAILURE);
@ -642,12 +649,12 @@ do_one_line(perf_buffer_t* lines, perf_buffer_t* msg)
&server_addr.sa.sa, server_addr.length) &server_addr.sa.sa, server_addr.length)
< 1) { < 1) {
if (errno == EINPROGRESS) { if (errno == EINPROGRESS) {
if (verbose) { if (verbose && !suppress.congestion) {
perf_log_warning("network congested, packet sending in progress"); perf_log_warning("network congested, packet sending in progress");
} }
q->is_inprogress = true; q->is_inprogress = true;
} else { } else {
if (verbose) { if (verbose && !suppress.sendfailed) {
char __s[256]; char __s[256];
perf_log_warning("failed to send packet: %s", perf_strerror_r(errno, __s, sizeof(__s))); perf_log_warning("failed to send packet: %s", perf_strerror_r(errno, __s, sizeof(__s)));
} }
@ -702,7 +709,7 @@ try_process_response(unsigned int sockindex)
if (perf_net_sockready(socks[sockindex], dummypipe[0], TIMEOUT_CHECK_TIME) == -1) { if (perf_net_sockready(socks[sockindex], dummypipe[0], TIMEOUT_CHECK_TIME) == -1) {
if (errno != EINPROGRESS) { if (errno != EINPROGRESS) {
if (verbose) { if (verbose && !suppress.sockready) {
char __s[256]; char __s[256];
perf_log_warning("failed to check socket readiness: %s", perf_strerror_r(errno, __s, sizeof(__s))); perf_log_warning("failed to check socket readiness: %s", perf_strerror_r(errno, __s, sizeof(__s)));
} }