From eb45f34378a1a3602869a961baf51df402974ba3 Mon Sep 17 00:00:00 2001 From: Julian Elischer Date: Thu, 5 Feb 1998 21:16:52 +0000 Subject: [PATCH] slight cleanup in handling sockets and file descriptors. Same fix already applied to other types of fds. This one was apparently missed. --- lib/libc_r/uthread/uthread_accept.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/libc_r/uthread/uthread_accept.c b/lib/libc_r/uthread/uthread_accept.c index e240cdecbf43..1078bfe06603 100644 --- a/lib/libc_r/uthread/uthread_accept.c +++ b/lib/libc_r/uthread/uthread_accept.c @@ -76,9 +76,6 @@ accept(int fd, struct sockaddr * name, int *namelen) } } - /* Unlock the file descriptor: */ - _thread_fd_unlock(fd, FD_RDWR); - /* Check for errors: */ if (ret < 0) { } @@ -90,6 +87,19 @@ accept(int fd, struct sockaddr * name, int *namelen) /* Return an error: */ ret = -1; } + /* + * If the parent socket was blocking, make sure that + * the new socket is also set blocking here (as the + * call to _thread_fd_table_init() above will always + * set the new socket flags to non-blocking, as that + * will be the inherited state of the new socket. + */ + if((_thread_fd_table[fd]->flags & O_NONBLOCK) == 0) + _thread_fd_table[ret]->flags &= ~O_NONBLOCK; + + /* Unlock the file descriptor: */ + _thread_fd_unlock(fd, FD_RDWR); + } /* Return the socket file descriptor or -1 on error: */ return (ret);