/************************************************************************** * 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 **************************************************************************/ #if !defined(__BSD_SOCKET_H__) #define __BSD_SOCKET_H__ /************************************************************************** * Includes **************************************************************************/ #include #include #include /************************************************************************** * All Structures and Common Constants **************************************************************************/ /* * Error code of the BSD socket api. */ #define SOCKET_ERROR -1 /* * Level number for (get/set)sockopt() to apply to socket itself. */ #define SOL_SOCKET 0xffff /* Options for socket level */ /* * shutdown "How" options */ #define SHUT_RD 0 #define SHUT_WR 1 #define SHUT_RDWR 2 /* * sockaddr */ struct sockaddr { uint8_t sa_len; uint8_t sa_family; char sa_data[14]; }; /* * in_addr */ struct in_addr { uint32_t s_addr; }; /* * sockaddr_in */ struct sockaddr_in { uint8_t sin_len; uint8_t sin_family; uint16_t sin_port; struct in_addr sin_addr; char sin_zero[8]; }; /* * socket_t */ typedef int32_t socket_t; /************************************************************************** * Macro Definitions **************************************************************************/ /************************************************************************** * Funtions Definitions **************************************************************************/ /* * The BSD socket functions are grouped in several categories. * For more information take a look in: "TCP/IP Illustrated, Volume 2" */ /* * Setup category */ socket_t socket (int domain, int type, int proto); int bind (socket_t sock, struct sockaddr *addr, int addr_len); /* * Server category */ int listen (socket_t sock, int backlog); /* Only backlog of 1 */ socket_t accept (socket_t sock, struct sockaddr *addr, int *addr_len); /* * Client category */ int connect (socket_t sock, struct sockaddr *addr, int addr_len); /* * Input category */ int recv (socket_t sock, void *data, size_t len, int flags); int recvfrom (socket_t sock, void *data, size_t len, int flags, struct sockaddr *addr, int *addr_len); /* * Output category */ int send (socket_t sock, void *data, size_t len, int flags); int sendto (socket_t sock, void *data, size_t len, int flags, struct sockaddr *addr, int addr_len); /* * Termination category */ int closesocket (socket_t sock); int shutdown (socket_t sock, int how); /* Dummy only */ /* * Administration category */ int getsockname (socket_t sock, struct sockaddr *addr, int *addr_len); int getpeername (socket_t sock, struct sockaddr *addr, int *addr_len); int getsockopt (socket_t sock, int level, int optname, void *optval, int optlen); int setsockopt (socket_t sock, int level, int optname, void *optval, int optlen); #endif /* !__BSD_SOCKET_H__ */ /*** EOF ***/