mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 16:50:55 +08:00
net/rpmsgsocket: fix connect timeout when remote not ready
force connect to block mode Change-Id: I458f806411c93def0e64596f8e1c1680c485b298 Signed-off-by: ligd <liguiding1@xiaomi.com>
This commit is contained in:
+19
-16
@@ -612,6 +612,8 @@ static int rpmsg_socket_listen(FAR struct socket *psock, int backlog)
|
||||
static int rpmsg_socket_connect_internal(FAR struct socket *psock)
|
||||
{
|
||||
FAR struct rpmsg_socket_conn_s *conn = psock->s_conn;
|
||||
unsigned int timeout;
|
||||
unsigned int tc;
|
||||
int ret;
|
||||
|
||||
ret = circbuf_resize(&conn->recvbuf, CONFIG_NET_RPMSG_RXBUF_SIZE);
|
||||
@@ -629,30 +631,31 @@ static int rpmsg_socket_connect_internal(FAR struct socket *psock)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = rpmsg_socket_sync(conn);
|
||||
if (ret < 0)
|
||||
{
|
||||
goto out;
|
||||
}
|
||||
ret = -ETIMEDOUT;
|
||||
timeout = _SO_TIMEOUT(psock->s_rcvtimeo);
|
||||
|
||||
ret = net_timedwait(&conn->sendsem, _SO_TIMEOUT(psock->s_rcvtimeo));
|
||||
if (!conn->ept.rdev)
|
||||
for (tc = 0; tc < timeout * 1000;)
|
||||
{
|
||||
ret = -ECONNRESET;
|
||||
ret = rpmsg_socket_sync(conn);
|
||||
if (ret != RPMSG_ERR_ADDR)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (timeout != UINT_MAX)
|
||||
{
|
||||
tc += RPMSG_TICK_COUNT;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret < 0)
|
||||
{
|
||||
goto out;
|
||||
rpmsg_unregister_callback(conn,
|
||||
rpmsg_socket_device_created,
|
||||
rpmsg_socket_device_destroy,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out:
|
||||
rpmsg_unregister_callback(conn,
|
||||
rpmsg_socket_device_created,
|
||||
rpmsg_socket_device_destroy,
|
||||
NULL);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user