You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ma...@apache.org on 2022/11/22 06:18:21 UTC
[incubator-nuttx] branch master updated: usrsock: add REMOTE_CLOSED event handler to connect
This is an automated email from the ASF dual-hosted git repository.
masayuki pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new ae46cd4fa1 usrsock: add REMOTE_CLOSED event handler to connect
ae46cd4fa1 is described below
commit ae46cd4fa1a8399e4718c43a8204ce1b3c085b45
Author: zhanghongyu <zh...@xiaomi.com>
AuthorDate: Mon Nov 21 23:12:08 2022 +0800
usrsock: add REMOTE_CLOSED event handler to connect
when usrsock client try to connect usrsock server local_loop
socket with an invalid port, server cannot find a listener conn
to handle this connet request, then it will response a TCP_RESET
packet via nuttx existing processing, when before conn recv this
RESET packet, it will trigger usrsock_rpmsg_server poll return
and send REMOTE_CLOSE event to usrsock client.
so usrsock connect_event fucntion need handle this event.
Signed-off-by: zhanghongyu <zh...@xiaomi.com>
---
net/usrsock/usrsock_connect.c | 29 +++++++++++++----------------
1 file changed, 13 insertions(+), 16 deletions(-)
diff --git a/net/usrsock/usrsock_connect.c b/net/usrsock/usrsock_connect.c
index 7793f6847a..68e8e9e8d7 100644
--- a/net/usrsock/usrsock_connect.c
+++ b/net/usrsock/usrsock_connect.c
@@ -54,33 +54,29 @@ static uint16_t connect_event(FAR struct net_driver_s *dev,
ninfo("socket aborted.\n");
pstate->result = -ECONNABORTED;
+ }
+ else if (flags & USRSOCK_EVENT_REMOTE_CLOSED)
+ {
+ ninfo("remote closed.\n");
- /* Stop further callbacks */
-
- pstate->cb->flags = 0;
- pstate->cb->priv = NULL;
- pstate->cb->event = NULL;
-
- /* Wake up the waiting thread */
-
- nxsem_post(&pstate->recvsem);
+ pstate->result = -ECONNREFUSED;
}
else
{
ninfo("request completed.\n");
pstate->result = conn->resp.result;
+ }
- /* Stop further callbacks */
+ /* Stop further callbacks */
- pstate->cb->flags = 0;
- pstate->cb->priv = NULL;
- pstate->cb->event = NULL;
+ pstate->cb->flags = 0;
+ pstate->cb->priv = NULL;
+ pstate->cb->event = NULL;
- /* Wake up the waiting thread */
+ /* Wake up the waiting thread */
- nxsem_post(&pstate->recvsem);
- }
+ nxsem_post(&pstate->recvsem);
return flags;
}
@@ -199,6 +195,7 @@ int usrsock_connect(FAR struct socket *psock,
ret = usrsock_setup_request_callback(conn, &state, connect_event,
USRSOCK_EVENT_ABORT |
+ USRSOCK_EVENT_REMOTE_CLOSED |
USRSOCK_EVENT_REQ_COMPLETE |
USRSOCK_EVENT_SENDTO_READY);
if (ret < 0)