diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2015-01-25 16:27:25 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2015-01-25 16:27:25 -0600 |
commit | 8cac18f0f8619c9f3f0a6429904eeceb3c965302 (patch) | |
tree | 4176c46865c705fa927a6816422b108508d45476 /nuttx/net/socket | |
parent | e71c09ce9777ff732cb60bd07fb43d85522f79d6 (diff) | |
download | px4-nuttx-8cac18f0f8619c9f3f0a6429904eeceb3c965302.tar.gz px4-nuttx-8cac18f0f8619c9f3f0a6429904eeceb3c965302.tar.bz2 px4-nuttx-8cac18f0f8619c9f3f0a6429904eeceb3c965302.zip |
Networking: Add local Unix domain socket accept logic
Diffstat (limited to 'nuttx/net/socket')
-rw-r--r-- | nuttx/net/socket/accept.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/nuttx/net/socket/accept.c b/nuttx/net/socket/accept.c index 3d42160d6..5cddaa264 100644 --- a/nuttx/net/socket/accept.c +++ b/nuttx/net/socket/accept.c @@ -133,7 +133,6 @@ int accept(int sockfd, FAR struct sockaddr *addr, FAR socklen_t *addrlen) { FAR struct socket *psock = sockfd_socket(sockfd); FAR struct socket *pnewsock; - net_lock_t save; int newfd; int err; int ret; @@ -266,6 +265,8 @@ int accept(int sockfd, FAR struct sockaddr *addr, FAR socklen_t *addrlen) if (psock->s_domain == PF_LOCAL) #endif { + /* Perform the local accept operation (with the network unlocked) */ + ret = psock_local_accept(psock, addr, addrlen, &pnewsock->s_conn); if (ret < 0) { @@ -280,11 +281,15 @@ int accept(int sockfd, FAR struct sockaddr *addr, FAR socklen_t *addrlen) else #endif { - save = net_lock(); - ret = psock_tcp_accept(psock, addr, addrlen, &pnewsock->s_conn); + net_lock_t state; + + /* Perform the local accept operation (with the network locked) */ + + state = net_lock(); + ret = psock_tcp_accept(psock, addr, addrlen, &pnewsock->s_conn); if (ret < 0) { - net_unlock(save); + net_unlock(state); err = -ret; goto errout_with_socket; } @@ -294,7 +299,7 @@ int accept(int sockfd, FAR struct sockaddr *addr, FAR socklen_t *addrlen) */ net_startmonitor(pnewsock); - net_unlock(save); + net_unlock(state); } #endif /* CONFIG_NET_TCP */ |