aboutsummaryrefslogtreecommitdiff
path: root/nuttx/net/setsockopt.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/net/setsockopt.c')
-rw-r--r--nuttx/net/setsockopt.c304
1 files changed, 0 insertions, 304 deletions
diff --git a/nuttx/net/setsockopt.c b/nuttx/net/setsockopt.c
deleted file mode 100644
index ad52ff53d..000000000
--- a/nuttx/net/setsockopt.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/****************************************************************************
- * net/setsockopt.c
- *
- * Copyright (C) 2007, 2008, 2011-2012 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) && defined(CONFIG_NET_SOCKOPTS)
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <errno.h>
-#include <arch/irq.h>
-
-#include "net_internal.h"
-
-/****************************************************************************
- * Global Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Function: psock_setsockopt
- *
- * Description:
- * psock_setsockopt() sets the option specified by the 'option' argument,
- * at the protocol level specified by the 'level' argument, to the value
- * pointed to by the 'value' argument for the socket on the 'psock' argument.
- *
- * The 'level' argument specifies the protocol level of the option. To set
- * options at the socket level, specify the level argument as SOL_SOCKET.
- *
- * See <sys/socket.h> a complete list of values for the 'option' argument.
- *
- * Parameters:
- * psock Socket structure of socket to operate on
- * level Protocol level to set the option
- * option identifies the option to set
- * value Points to the argument value
- * value_len The length of the argument value
- *
- * Returned Value:
- * 0 on success; -1 on failure
- *
- * EDOM
- * The send and receive timeout values are too big to fit into the
- * timeout fields in the socket structure.
- * EINVAL
- * The specified option is invalid at the specified socket 'level' or the
- * socket has been shut down.
- * EISCONN
- * The socket is already connected, and a specified option cannot be set
- * while the socket is connected.
- * ENOPROTOOPT
- * The 'option' is not supported by the protocol.
- * ENOTSOCK
- * The 'sockfd' argument does not refer to a socket.
- * ENOMEM
- * There was insufficient memory available for the operation to complete.
- * ENOBUFS
- * Insufficient resources are available in the system to complete the
- * call.
- *
- * Assumptions:
- *
- ****************************************************************************/
-
-int psock_setsockopt(FAR struct socket *psock, int level, int option,
- FAR const void *value, socklen_t value_len)
-{
- uip_lock_t flags;
- int err;
-
- /* Verify that the socket option if valid (but might not be supported ) */
-
- if (!_SO_SETVALID(option) || !value)
- {
- err = EINVAL;
- goto errout;
- }
-
- /* Process the option */
- switch (option)
- {
- /* The following options take a point to an integer boolean value.
- * We will blindly set the bit here although the implementation
- * is outside of the scope of setsockopt.
- */
-
- case SO_DEBUG: /* Enables recording of debugging information */
- case SO_BROADCAST: /* Permits sending of broadcast messages */
- case SO_REUSEADDR: /* Allow reuse of local addresses */
- case SO_KEEPALIVE: /* Keeps connections active by enabling the
- * periodic transmission */
- case SO_OOBINLINE: /* Leaves received out-of-band data inline */
- case SO_DONTROUTE: /* Requests outgoing messages bypass standard routing */
- {
- int setting;
-
- /* Verify that option is the size of an 'int'. Should also check
- * that 'value' is properly aligned for an 'int'
- */
-
- if (value_len != sizeof(int))
- {
- err = EINVAL;
- goto errout;
- }
-
- /* Get the value. Is the option being set or cleared? */
-
- setting = *(int*)value;
-
- /* Disable interrupts so that there is no conflict with interrupt
- * level access to options.
- */
-
- flags = uip_lock();
-
- /* Set or clear the option bit */
-
- if (setting)
- {
- _SO_SETOPT(psock->s_options, option);
- }
- else
- {
- _SO_CLROPT(psock->s_options, option);
- }
- uip_unlock(flags);
- }
- break;
-
- /* The following are valid only if the OS CLOCK feature is enabled */
-
- case SO_RCVTIMEO:
- case SO_SNDTIMEO:
-#ifndef CONFIG_DISABLE_CLOCK
- {
- socktimeo_t timeo;
-
- /* Verify that option is the size of an 'struct timeval'. */
-
- if (value_len != sizeof(struct timeval))
- {
- err = EINVAL;
- goto errout;
- }
-
- /* Get the timeout value */
-
- timeo = net_timeval2dsec((struct timeval *)value);
-
- /* Save the timeout value */
-
- if (option == SO_RCVTIMEO)
- {
- psock->s_rcvtimeo = timeo;
- }
- else
- {
- psock->s_sndtimeo = timeo;
- }
-
- /* Set/clear the corresponding enable/disable bit */
-
- if (timeo)
- {
- _SO_CLROPT(psock->s_options, option);
- }
- else
- {
- _SO_SETOPT(psock->s_options, option);
- }
- }
- break;
-#endif
-
- /* The following are not yet implemented */
-
- case SO_LINGER:
- case SO_SNDBUF: /* Sets send buffer size */
- case SO_RCVBUF: /* Sets receive buffer size */
- case SO_RCVLOWAT: /* Sets the minimum number of bytes to input */
- case SO_SNDLOWAT: /* Sets the minimum number of bytes to output */
-
- /* There options are only valid when used with getopt */
-
- case SO_ACCEPTCONN: /* Reports whether socket listening is enabled */
- case SO_ERROR: /* Reports and clears error status. */
- case SO_TYPE: /* Reports the socket type */
-
- default:
- err = ENOPROTOOPT;
- goto errout;
- }
- return OK;
-
-errout:
- set_errno(err);
- return ERROR;
-}
-
-/****************************************************************************
- * Function: setsockopt
- *
- * Description:
- * setsockopt() sets the option specified by the 'option' argument,
- * at the protocol level specified by the 'level' argument, to the value
- * pointed to by the 'value' argument for the socket associated with the
- * file descriptor specified by the 'sockfd' argument.
- *
- * The 'level' argument specifies the protocol level of the option. To set
- * options at the socket level, specify the level argument as SOL_SOCKET.
- *
- * See <sys/socket.h> a complete list of values for the 'option' argument.
- *
- * Parameters:
- * sockfd Socket descriptor of socket
- * level Protocol level to set the option
- * option identifies the option to set
- * value Points to the argument value
- * value_len The length of the argument value
- *
- * Returned Value:
- * 0 on success; -1 on failure
- *
- * EBADF
- * The 'sockfd' argument is not a valid socket descriptor.
- * EDOM
- * The send and receive timeout values are too big to fit into the
- * timeout fields in the socket structure.
- * EINVAL
- * The specified option is invalid at the specified socket 'level' or the
- * socket has been shut down.
- * EISCONN
- * The socket is already connected, and a specified option cannot be set
- * while the socket is connected.
- * ENOPROTOOPT
- * The 'option' is not supported by the protocol.
- * ENOTSOCK
- * The 'sockfd' argument does not refer to a socket.
- * ENOMEM
- * There was insufficient memory available for the operation to complete.
- * ENOBUFS
- * Insufficient resources are available in the system to complete the
- * call.
- *
- * Assumptions:
- *
- ****************************************************************************/
-
-int setsockopt(int sockfd, int level, int option, const void *value, socklen_t value_len)
-{
- FAR struct socket *psock;
-
- /* Get the underlying socket structure */
- /* Verify that the sockfd corresponds to valid, allocated socket */
-
- psock = sockfd_socket(sockfd);
- if (!psock || psock->s_crefs <= 0)
- {
- set_errno(EBADF);
- return ERROR;
- }
-
- /* Then let psock_setockopt() do all of the work */
-
- return psock_setsockopt(psock, level, option, value, value_len);
-}
-
-#endif /* CONFIG_NET && CONFIG_NET_SOCKOPTS */