From 8a87e3ca6e29c4de5ab0dcb3edb806cf88dddbec Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Wed, 9 Sep 2015 07:03:05 -0600 Subject: [PATCH] Add an empty function that can serve as a placeholder for the network shutdown() function --- ChangeLog | 6 ++- include/sys/socket.h | 10 ++++- libc/net/Make.defs | 3 +- libc/net/lib_shutdown.c | 86 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 libc/net/lib_shutdown.c diff --git a/ChangeLog b/ChangeLog index 171a92644c..7edb70f971 100755 --- a/ChangeLog +++ b/ChangeLog @@ -10958,5 +10958,9 @@ asynchronous queue when adding a new QH structure. From Ilya Averyanov (2015-09-07). * arch/arm/src/sama5: Separate memory mapping tables for SAMA5D2, 3, - and 4 (2015-09-07). + and 4 (2015-09-08). + * libc/net/lib_shutdown.c: Add an empty implementatino of the + standard shutdown function. This provides only the framework for + the shutdown function; the internal logic is not included + (2015-09-09). diff --git a/include/sys/socket.h b/include/sys/socket.h index 4c7b79ee79..0f9f10f4d1 100644 --- a/include/sys/socket.h +++ b/include/sys/socket.h @@ -1,7 +1,7 @@ /**************************************************************************** * include/sys/socket.h * - * Copyright (C) 2007, 2009, 2011 Gregory Nutt. All rights reserved. + * Copyright (C) 2007, 2009, 2011, 2015 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -155,6 +155,12 @@ #define SOL_SOCKET 0 /* Only socket-level options supported */ +/* Values for the 'how' argument of shutdown() */ + +#define SHUT_RD 1 /* Bit 0: Disables further receive operations */ +#define SHUT_WR 2 /* Bit 1: Disables further send operations */ +#define SHUT_RDWR 3 /* Bits 0+1: Disables further send and receive operations */ + /**************************************************************************** * Type Definitions ****************************************************************************/ @@ -227,6 +233,8 @@ ssize_t recv(int sockfd, FAR void *buf, size_t len, int flags); ssize_t recvfrom(int sockfd, FAR void *buf, size_t len, int flags, FAR struct sockaddr *from, FAR socklen_t *fromlen); +int shutdown(int sockfd, int how); + int setsockopt(int sockfd, int level, int option, FAR const void *value, socklen_t value_len); int getsockopt(int sockfd, int level, int option, diff --git a/libc/net/Make.defs b/libc/net/Make.defs index 6fe3cce9c2..26f39738a5 100644 --- a/libc/net/Make.defs +++ b/libc/net/Make.defs @@ -1,7 +1,7 @@ ############################################################################ # libc/net/Make.defs # -# Copyright (C) 2011-2013 Gregory Nutt. All rights reserved. +# Copyright (C) 2011-2013, 2015 Gregory Nutt. All rights reserved. # Author: Gregory Nutt # # Redistribution and use in source and binary forms, with or without @@ -37,6 +37,7 @@ CSRCS += lib_addrconfig.c lib_etherntoa.c lib_htons.c lib_htonl.c CSRCS += lib_inetaddr.c lib_inetntoa.c lib_inetntop.c lib_inetpton.c +CSRCS += lib_shutdown.c # Routing table support diff --git a/libc/net/lib_shutdown.c b/libc/net/lib_shutdown.c new file mode 100644 index 0000000000..a1ef4316ac --- /dev/null +++ b/libc/net/lib_shutdown.c @@ -0,0 +1,86 @@ +/**************************************************************************** + * libc/net/lib_shutdown.c + * + * Copyright (c) 2015, Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * 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 of the Institute 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 INSTITUTE 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 INSTITUTE 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 + +#include + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Public FUnctions + ****************************************************************************/ + +/**************************************************************************** + * Name: shutdown + * + * Description: + * The shutdown() function will cause all or part of a full-duplex + * connection on the socket associated with the file descriptor socket to + * be shut down. + * + * The shutdown() function disables subsequent send and/or receive + * operations on a socket, depending on the value of the how argument. + + * Input Paramteers: + * sockfd - Specifies the file descriptor of the socket. + * how - Specifies the type of shutdown. The values are as follows: + * + * SHUT_RD - Disables further receive operations. + * SHUT_WR - Disables further send operations. + * SHUT_RDWR - Disables further send and receive operations. + * + * Returned Value: + * Upon successful completion, shutdown() will return 0; otherwise, -1 will + * be returned and errno set to indicate the error. + + * EBADF - The socket argument is not a valid file descriptor. + * EINVAL - The how argument is invalid. + * ENOTCONN - The socket is not connected. + * ENOTSOCK - The socket argument does not refer to a socket. + * ENOBUFS - Insufficient resources were available in the system to + * perform the operation. + * + ****************************************************************************/ + +int shutdown(int sockfd, int how) +{ +#warning Missing Logic + return OK; +}