laforge has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-netif/+/36354?usp=email )
Change subject: stream_cli.c: Handle read / recvfrom error and close connection ......................................................................
stream_cli.c: Handle read / recvfrom error and close connection
If read or recvfrom fails or returns 0, the connection must be closed. This is already done when a write / send fails. In both cases the disconnect callback is called to notify the user's client.
Not handling the error may cause an infinite loop of read or recvfrom failures.
Related: OS#6405 Change-Id: I55426de6b49cb4cb0797e50dfeae11f2efc29b15 --- M src/stream_cli.c 1 file changed, 28 insertions(+), 3 deletions(-)
Approvals: pespin: Looks good to me, but someone else must approve laforge: Looks good to me, approved Jenkins Builder: Verified
diff --git a/src/stream_cli.c b/src/stream_cli.c index fa43a22..11c88ae 100644 --- a/src/stream_cli.c +++ b/src/stream_cli.c @@ -449,9 +449,13 @@ stream_cli_handle_connecting(cli, res); break; case STREAM_CLI_STATE_CONNECTED: - if (res == 0) + if (res <= 0) { + LOGSCLI(cli, LOGL_NOTICE, "received result %d in response to read\n", res); osmo_stream_cli_reconnect(cli); - else if (cli->iofd_read_cb) + msgb_free(msg); + break; + } + if (cli->iofd_read_cb) cli->iofd_read_cb(cli, msg); else msgb_free(msg); @@ -500,8 +504,12 @@ stream_cli_handle_connecting(cli, res); break; case STREAM_CLI_STATE_CONNECTED: - if (res == 0) + if (res <= 0) { + LOGSCLI(cli, LOGL_NOTICE, "received result %d in response to recvmsg\n", res); osmo_stream_cli_reconnect(cli); + msgb_free(msg); + break; + } /* Forward message to read callback, also if the connection failed. */ if (cli->iofd_read_cb) cli->iofd_read_cb(cli, msg);