summaryrefslogtreecommitdiff
path: root/nuttx/net/socket
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2015-01-25 16:27:25 -0600
committerGregory Nutt <gnutt@nuttx.org>2015-01-25 16:27:25 -0600
commit8cac18f0f8619c9f3f0a6429904eeceb3c965302 (patch)
tree4176c46865c705fa927a6816422b108508d45476 /nuttx/net/socket
parente71c09ce9777ff732cb60bd07fb43d85522f79d6 (diff)
downloadpx4-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.c15
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 */