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 also done when a write / send fails. In both cases the disconnect callback is called, to notify the user's client. Related: OS#6405 Change-Id: I55426de6b49cb4cb0797e50dfeae11f2efc29b15
This commit is contained in:
parent
34a657d1e1
commit
0245cf5e07
|
@ -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);
|
stream_cli_handle_connecting(cli, res);
|
||||||
break;
|
break;
|
||||||
case STREAM_CLI_STATE_CONNECTED:
|
case STREAM_CLI_STATE_CONNECTED:
|
||||||
if (res == 0)
|
if (res <= 0) {
|
||||||
|
LOGSCLI(cli, LOGL_ERROR, "received result %d in response to read\n", res);
|
||||||
osmo_stream_cli_reconnect(cli);
|
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);
|
cli->iofd_read_cb(cli, msg);
|
||||||
else
|
else
|
||||||
msgb_free(msg);
|
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);
|
stream_cli_handle_connecting(cli, res);
|
||||||
break;
|
break;
|
||||||
case STREAM_CLI_STATE_CONNECTED:
|
case STREAM_CLI_STATE_CONNECTED:
|
||||||
if (res == 0)
|
if (res <= 0) {
|
||||||
|
LOGSCLI(cli, LOGL_ERROR, "received result %d in response to recvmsg\n", res);
|
||||||
osmo_stream_cli_reconnect(cli);
|
osmo_stream_cli_reconnect(cli);
|
||||||
|
msgb_free(msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
/* Forward message to read callback, also if the connection failed. */
|
/* Forward message to read callback, also if the connection failed. */
|
||||||
if (cli->iofd_read_cb)
|
if (cli->iofd_read_cb)
|
||||||
cli->iofd_read_cb(cli, msg);
|
cli->iofd_read_cb(cli, msg);
|
||||||
|
|
Loading…
Reference in New Issue