From: Holger Hans Peter Freyther <[email protected]>

When the link is being created BSC_FD_WRITE and BSC_FD_READ are
being ored into the flag. When the socket connects the first time
the ipa_client_fd_cb function is called and the link->state is
moved from connecting to connect.

In case the connection drops and ipa_client_conn_open is called
again the BSC_FD_WRITE flag might not be set. This means that after
the socket is connected, ipa_client_fd_cb will not be called. This
means that the updown_cb will not be called until after the first
write or read on the socket. It might even lead to missing some
data.

When re-connecting set the write flag again.
---
 src/input/ipa.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/input/ipa.c b/src/input/ipa.c
index e2da6f4..1ddf802 100644
--- a/src/input/ipa.c
+++ b/src/input/ipa.c
@@ -218,6 +218,7 @@ int ipa_client_conn_open(struct ipa_client_conn *link)
                        return ret;
        }
        link->ofd->fd = ret;
+       link->ofd->when |= BSC_FD_WRITE;
        if (osmo_fd_register(link->ofd) < 0) {
                close(ret);
                link->ofd->fd = -1;
-- 
2.1.3

Reply via email to