pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-netif/+/34079 )
Change subject: stream_cli: Proper handling of send() socket errors ......................................................................
stream_cli: Proper handling of send() socket errors
Upon EAGAIN, simply re-enqueue the message and return waiting for next poll. Upon any other error, force close + reconnect.
Related: OS#6134 Change-Id: I462cb176ebc51f3e99ee796310e8665144c84ccc --- M src/stream_cli.c 1 file changed, 22 insertions(+), 3 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-netif refs/changes/79/34079/1
diff --git a/src/stream_cli.c b/src/stream_cli.c index 0e075b8..e90b5e4 100644 --- a/src/stream_cli.c +++ b/src/stream_cli.c @@ -288,9 +288,15 @@ }
if (ret < 0) { - if (errno == EPIPE || errno == ENOTCONN) - osmo_stream_cli_reconnect(cli); - LOGSCLI(cli, LOGL_ERROR, "received error %d in response to send\n", errno); + int err = errno; + LOGSCLI(cli, LOGL_ERROR, "error to send: %s\n", strerror(err)); + if (err == EAGAIN) { + /* Re-add at the start of the queue to re-attempt: */ + llist_add(&msg->list, &cli->tx_queue); + return 0; + } + msgb_free(msg); + osmo_stream_cli_reconnect(cli); }
msgb_free(msg);