diff options
Diffstat (limited to 'nuttx/net/listen.c')
-rw-r--r-- | nuttx/net/listen.c | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/nuttx/net/listen.c b/nuttx/net/listen.c deleted file mode 100644 index 5e3c62f69..000000000 --- a/nuttx/net/listen.c +++ /dev/null @@ -1,149 +0,0 @@ -/**************************************************************************** - * net/listen.c - * - * Copyright (C) 2007-2009 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt <gnutt@nuttx.org> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name NuttX nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/**************************************************************************** - * Included Files - ****************************************************************************/ - -#include <nuttx/config.h> -#if defined(CONFIG_NET) && CONFIG_NSOCKET_DESCRIPTORS > 0 - -#include <sys/socket.h> -#include <errno.h> -#include <debug.h> - -#include "net_internal.h" - -/**************************************************************************** - * Global Functions - ****************************************************************************/ - -/**************************************************************************** - * Function: listen - * - * Description: - * To accept connections, a socket is first created with socket(), a - * willingness to accept incoming connections and a queue limit for incoming - * connections are specified with listen(), and then the connections are - * accepted with accept(). The listen() call applies only to sockets of - * type SOCK_STREAM or SOCK_SEQPACKET. - * - * Parameters: - * sockfd Socket descriptor of the bound socket - * backlog The maximum length the queue of pending connections may grow. - * If a connection request arrives with the queue full, the client - * may receive an error with an indication of ECONNREFUSED or, - * if the underlying protocol supports retransmission, the request - * may be ignored so that retries succeed. - * - * Returned Value: - * On success, zero is returned. On error, -1 is returned, and errno is set - * appropriately. - * - * EADDRINUSE - * Another socket is already listening on the same port. - * EBADF - * The argument 'sockfd' is not a valid descriptor. - * ENOTSOCK - * The argument 'sockfd' is not a socket. - * EOPNOTSUPP - * The socket is not of a type that supports the listen operation. - * - * Assumptions: - * - ****************************************************************************/ - -int listen(int sockfd, int backlog) -{ - FAR struct socket *psock = sockfd_socket(sockfd); - struct uip_conn *conn; - int err; - - /* Verify that the sockfd corresponds to valid, allocated socket */ - - if (!psock || psock->s_crefs <= 0) - { - /* It is not a valid socket description. Distinguish between the cases - * where sockfd is a just invalid and when it is a valid file descriptor used - * in the wrong context. - */ - -#if CONFIG_NFILE_DESCRIPTORS > 0 - if ((unsigned int)sockfd < CONFIG_NFILE_DESCRIPTORS) - { - err = ENOTSOCK; - } - else -#endif - { - err = EBADF; - } - goto errout; - } - - /* Verify that the sockfd corresponds to a connected SOCK_STREAM */ - - conn = (struct uip_conn *)psock->s_conn; - if (psock->s_type != SOCK_STREAM || !psock->s_conn || conn->lport <= 0) - { - err = EOPNOTSUPP; - goto errout; - } - - /* Set up the backlog for this connection */ - -#ifdef CONFIG_NET_TCPBACKLOG - err = uip_backlogcreate(conn, backlog); - if (err < 0) - { - err = -err; - goto errout; - } -#endif - - /* Start listening to the bound port. This enables callbacks when accept() - * is called and enables poll()/select() logic. - */ - - uip_listen(conn); - psock->s_flags |= _SF_LISTENING; - return OK; - -errout: - errno = err; - return ERROR; -} - -#endif /* CONFIG_NET && CONFIG_NSOCKET_DESCRIPTORS */ |