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:
ligd
2020-12-11 14:38:19 +08:00
parent 211176f930
commit 9ac98f21dc
+19 -16
View File
@@ -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;
}