MCPcopy Create free account
hub / github.com/apache/nuttx / rpmsg_socket_accept

Function rpmsg_socket_accept

net/rpmsg/rpmsg_sockif.c:826–889  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

824}
825
826static int rpmsg_socket_accept(FAR struct socket *psock,
827 FAR struct sockaddr *addr,
828 FAR socklen_t *addrlen,
829 FAR struct socket *newsock,
830 int flags)
831{
832 FAR struct rpmsg_socket_conn_s *server = psock->s_conn;
833 int ret = 0;
834
835 if (!_SS_ISLISTENING(server->sconn.s_flags))
836 {
837 return -EINVAL;
838 }
839
840 while (1)
841 {
842 FAR struct rpmsg_socket_conn_s *conn = NULL;
843
844 nxmutex_lock(&server->recvlock);
845
846 if (server->next)
847 {
848 conn = server->next;
849 server->next = conn->next;
850 conn->next = NULL;
851 }
852
853 nxmutex_unlock(&server->recvlock);
854
855 if (conn)
856 {
857 if (conn->sendsize == 0)
858 {
859 net_sem_wait(&conn->sendsem);
860 }
861
862 newsock->s_domain = psock->s_domain;
863 newsock->s_sockif = psock->s_sockif;
864 newsock->s_type = SOCK_STREAM;
865 newsock->s_conn = conn;
866
867 rpmsg_socket_getaddr(conn, addr, addrlen);
868 break;
869 }
870 else
871 {
872 if (_SS_ISNONBLOCK(server->sconn.s_flags))
873 {
874 ret = -EAGAIN;
875 break;
876 }
877 else
878 {
879 ret = net_sem_wait(&server->recvsem);
880 if (ret < 0)
881 {
882 break;
883 }

Callers

nothing calls this directly

Calls 4

nxmutex_lockFunction · 0.85
nxmutex_unlockFunction · 0.85
net_sem_waitFunction · 0.85
rpmsg_socket_getaddrFunction · 0.85

Tested by

no test coverage detected