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
This commit is contained in:
parent
ed62d190b6
commit
5fec34a9f2
|
@ -449,9 +449,13 @@ static void stream_cli_iofd_read_cb(struct osmo_io_fd *iofd, int res, struct msg
|
|||
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 @@ static void stream_cli_iofd_recvmsg_cb(struct osmo_io_fd *iofd, int res, struct
|
|||
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);
|
||||
|
|
Loading…
Reference in New Issue