File nut/net/bsd_socket.c

* Copyright (c) 2014 by Michael Fischer (www.emb4fun.de). * All rights reserved.
* Some parts are from the original BSD source, therefor:
* Partial Copyright (c) 1982, 1986, 1988, 1990, 1993 * The Regents of the University of California. All rights reserved.
* 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 author 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.
*************************************************************************** * History:
* 26.01.2014 mifi First Version. * 27.01.2014 mifi More comments and connect added. * 28.01.2014 mifi Backlog functionality added. * 02.02.2014 mifi - Backlog does not work correct. * - Corrected sendto. * - Added support for setsockopt IP_ADD_MEMBERSHIP and * IP_DROP_MEMBERSHIP. * 04.02.2014 mifi Corrected backlog functionality.


Included Files


Preprocessor definitions

#define __BSD_SOCKET_C__

Typedef bsd_socket_t

typedef struct _bsd_socket_ bsd_socket_t
struct _bsd_socket_  
   {  
      int type;  
      uint16_t port;  
      SEM backlog_sem;  
      int is_listen_sock;  
      uint32_t udp_rcv_timeo;  
      struct _bsd_socket_* listen;  
      TCPSOCKET* nut_tcp_sock;  
      UDPSOCKET* nut_udp_sock;  
   }  

Global Function accept()

socket_t accept ( socket_t sock, struct sockaddr* addr, int* addr_len )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: memset() nut/c/string/memset.c
  socket() nut/net/bsd_socket.c
  NutSemPost(), NutSemWait(), NutTcpAccept(), NutTcpCloseSocket()

Global Function bind()

int bind ( socket_t sock, struct sockaddr* addr, int addr_len )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: __byte_swap2() nut/boot/appload/utils.c

Global Function closesocket()

int closesocket ( socket_t sock )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: free() nut/crt/malloc.c
  NutSemDestroy(), NutSemPost(), NutTcpCloseSocket(), NutUdpDestroySocket()

Global Function connect()

int connect ( socket_t sock, struct sockaddr* addr, int addr_len )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: __byte_swap2() nut/boot/appload/utils.c
  NutTcpConnect()

Global Function getpeername()

int getpeername ( socket_t sock, struct sockaddr* addr, int* addr_len )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: memset() nut/c/string/memset.c

Global Function getsockname()

int getsockname ( socket_t sock, struct sockaddr* addr, int* addr_len )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: memset() nut/c/string/memset.c

Global Function getsockopt()

int getsockopt ( socket_t sock, int level, int optname, void* optval, int optlen )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: NutTcpError(), NutTcpGetSockOpt(), NutUdpGetSockOpt()

Global Function listen()

int listen ( socket_t sock, int backlog )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: NutSemInit()

Global Function recv()

int recv ( socket_t sock, void* data, size_t len, int flags )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: NutTcpReceive()

Global Function recvfrom()

int recvfrom ( socket_t sock, void* data, size_t len, int flags, struct sockaddr* addr, int* addr_len )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: __byte_swap2() nut/boot/appload/utils.c
  memset() nut/c/string/memset.c
  NutUdpReceiveFrom()

Global Function send()

int send ( socket_t sock, void* data, size_t len, int flags )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: NutTcpSend()

Global Function sendto()

int sendto ( socket_t sock, void* data, size_t len, int flags, struct sockaddr* addr, int addr_len )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: __byte_swap2() nut/boot/appload/utils.c
  NutUdpSendTo()

Global Function setsockopt()

int setsockopt ( socket_t sock, int level, int optname, void* optval, int optlen )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: NutNetIfAddMcastAddr(), NutNetIfDelMcastAddr(), NutTcpSetSockOpt(), NutUdpSetSockOpt()

Global Function shutdown()

int shutdown ( socket_t sock, int how )
Prototyped in: nut/include/sys/bsd_socket.h

Global Function socket()

socket_t socket ( int domain, int type, int proto )
Prototyped in: nut/include/sys/bsd_socket.h
Calls: malloc() nut/crt/malloc.c
  memset() nut/c/string/memset.c
  NutTcpCloseSocket(), NutTcpCreateSocket(), NutUdpCreateSocket(), NutUdpDestroySocket()
Called by: accept() nut/net/bsd_socket.c