Webserver+3d print
Embed:
(wiki syntax)
Show/hide line numbers
bsd_socket.h
Go to the documentation of this file.
00001 /** 00002 * @file bsd_socket.h 00003 * @brief BSD socket API 00004 * 00005 * @section License 00006 * 00007 * Copyright (C) 2010-2017 Oryx Embedded SARL. All rights reserved. 00008 * 00009 * This file is part of CycloneTCP Open. 00010 * 00011 * This program is free software; you can redistribute it and/or 00012 * modify it under the terms of the GNU General Public License 00013 * as published by the Free Software Foundation; either version 2 00014 * of the License, or (at your option) any later version. 00015 * 00016 * This program is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU General Public License 00022 * along with this program; if not, write to the Free Software Foundation, 00023 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00024 * 00025 * @author Oryx Embedded SARL (www.oryx-embedded.com) 00026 * @version 1.7.6 00027 **/ 00028 00029 #ifndef _BSD_SOCKET_H 00030 #define _BSD_SOCKET_H 00031 00032 //BSD socket support 00033 #ifndef BSD_SOCKET_SUPPORT 00034 #define BSD_SOCKET_SUPPORT ENABLED 00035 #elif (BSD_SOCKET_SUPPORT != ENABLED && BSD_SOCKET_SUPPORT != DISABLED) 00036 #error BSD_SOCKET_SUPPORT parameter is not valid 00037 #endif 00038 00039 //Keil RTX port? 00040 #if defined(USE_RTX) && !defined(RTX_CUSTOM_HEADER) 00041 00042 //No support for BSD sockets 00043 #undef BSD_SOCKET_SUPPORT 00044 #define BSD_SOCKET_SUPPORT DISABLED 00045 00046 //Windows port? 00047 #elif defined(_WIN32) && !defined(_DONT_USE_WINSOCK) 00048 00049 //Undefine conflicting definitions 00050 #undef htons 00051 #undef htonl 00052 #undef ntohs 00053 #undef ntohl 00054 00055 //Dependencies 00056 #include <winsock2.h> 00057 00058 #else 00059 00060 //Dependencies 00061 #include "os_port.h" 00062 00063 //Address families 00064 #define AF_INET 2 00065 #define AF_INET6 10 00066 #define AF_PACKET 17 00067 00068 //Socket types 00069 #define SOCK_STREAM 1 00070 #define SOCK_DGRAM 2 00071 #define SOCK_RAW 3 00072 00073 //IP protocol identifiers 00074 #define IPPROTO_ICMP 1 00075 #define IPPROTO_IGMP 2 00076 #define IPPROTO_TCP 6 00077 #define IPPROTO_UDP 17 00078 #define IPPROTO_ICMPV6 58 00079 00080 //Ethernet protocol identifiers 00081 #define ETH_P_ALL 0x0000 00082 #define ETH_P_IP 0x0800 00083 #define ETH_P_ARP 0x0806 00084 #define ETH_P_IPV6 0x86DD 00085 00086 //Option levels 00087 #define SOL_SOCKET 0xFFFF 00088 00089 //Common addresses 00090 #define INADDR_ANY 0x00000000 00091 #define INADDR_LOOPBACK 0x7F000001 00092 #define INADDR_BROADCAST 0xFFFFFFFF 00093 00094 //Flags used by I/O functions 00095 #define MSG_PEEK 0x02 00096 #define MSG_DONTROUTE 0x04 00097 #define MSG_WAITALL 0x08 00098 #define MSG_DONTWAIT 0x01 00099 00100 //Flags used by shutdown function 00101 #define SD_RECEIVE 0 00102 #define SD_SEND 1 00103 #define SD_BOTH 2 00104 00105 //Socket level options 00106 #define SO_REUSEADDR 0x0004 00107 #define SO_KEEPALIVE 0x0008 00108 #define SO_DONTROUTE 0x0010 00109 #define SO_BROADCAST 0x0020 00110 #define SO_LINGER 0x0080 00111 #define SO_SNDBUF 0x1001 00112 #define SO_RCVBUF 0x1002 00113 #define SO_SNDTIMEO 0x1005 00114 #define SO_RCVTIMEO 0x1006 00115 #define SO_ERROR 0x1007 00116 #define SO_TYPE 0x1008 00117 #define SO_MAX_MSG_SIZE 0x2003 00118 #define SO_BINDTODEVICE 0x3000 00119 00120 //TCP level options 00121 #define TCP_NODELAY 0x0001 00122 00123 //IOCTL commands 00124 #define FIONREAD 0x400466FF 00125 #define FIONBIO 0x800466FE 00126 00127 //FCNTL commands 00128 #define F_GETFL 3 00129 #define F_SETFL 4 00130 00131 //FCNTL flags 00132 #define O_NONBLOCK 0x0004 00133 00134 //Status codes 00135 #define SOCKET_SUCCESS 0 00136 #define SOCKET_ERROR (-1) 00137 00138 //Error codes 00139 #define EAGAIN 11 00140 #define EWOULDBLOCK 11 00141 #define EFAULT 14 00142 #define EINVAL 22 00143 #define ENOPROTOOPT 92 00144 #define ECONNRESET 104 00145 #define EISCONN 106 00146 #define ENOTCONN 107 00147 #define ESHUTDOWN 108 00148 #define ECONNREFUSED 111 00149 00150 //Return codes 00151 #define INADDR_NONE ((in_addr_t) (-1)) 00152 00153 //Macros for manipulating and checking descriptor sets 00154 #define FD_SETSIZE 8 00155 #define FD_ZERO(fds) selectFdZero(fds) 00156 #define FD_SET(s, fds) selectFdSet(fds, s) 00157 #define FD_CLR(s, fds) selectFdClr(fds, s) 00158 #define FD_ISSET(s, fds) selectFdIsSet(fds, s) 00159 00160 00161 /** 00162 * @brief Length type 00163 **/ 00164 00165 typedef int_t socklen_t; 00166 00167 00168 /** 00169 * @brief IPv4 address 00170 **/ 00171 00172 typedef uint32_t in_addr_t; 00173 00174 00175 /** 00176 * @brief Socket address 00177 **/ 00178 00179 typedef struct sockaddr 00180 { 00181 uint16_t sa_family; 00182 uint8_t sa_data[14]; 00183 } sockaddr; 00184 00185 00186 /** 00187 * @brief Structure that represents an IPv4 address 00188 **/ 00189 00190 typedef struct in_addr 00191 { 00192 in_addr_t s_addr; 00193 } in_addr; 00194 00195 00196 /** 00197 * @brief IPv4 address information 00198 **/ 00199 00200 typedef struct sockaddr_in 00201 { 00202 uint16_t sin_family; 00203 uint16_t sin_port; 00204 in_addr sin_addr; 00205 uint8_t sin_zero[8]; 00206 } sockaddr_in; 00207 00208 00209 /** 00210 * @brief Structure that represents an IPv6 address 00211 **/ 00212 00213 typedef struct in6_addr 00214 { 00215 uint8_t s6_addr[16]; 00216 } in6_addr; 00217 00218 00219 /** 00220 * @brief IPv6 address information 00221 **/ 00222 00223 typedef struct sockaddr_in6 00224 { 00225 uint16_t sin6_family; 00226 uint16_t sin6_port; 00227 in6_addr sin6_addr; 00228 } sockaddr_in6; 00229 00230 00231 /** 00232 * @brief Set of sockets 00233 **/ 00234 00235 typedef struct fd_set 00236 { 00237 int_t fd_count; 00238 int_t fd_array[FD_SETSIZE]; 00239 } fd_set; 00240 00241 00242 /** 00243 * @brief Timeout structure 00244 **/ 00245 00246 typedef struct timeval 00247 { 00248 uint32_t tv_sec; 00249 uint32_t tv_usec; 00250 } timeval; 00251 00252 00253 /** 00254 * @brief Information about a given host 00255 **/ 00256 00257 typedef struct hostent 00258 { 00259 uint16_t h_addrtype; 00260 uint16_t h_length; 00261 uint8_t h_addr[16]; 00262 } hostent; 00263 00264 00265 //BSD socket related constants 00266 extern const in6_addr in6addr_any; 00267 extern const in6_addr in6addr_loopback; 00268 00269 //BSD socket API 00270 int_t socket(int_t family, int_t type, int_t protocol); 00271 int_t bind(int_t s, const sockaddr *addr, socklen_t addrlen); 00272 int_t connect(int_t s, const sockaddr *addr, socklen_t addrlen); 00273 int_t listen(int_t s, int_t backlog); 00274 int_t accept(int_t s, sockaddr *addr, socklen_t *addrlen); 00275 int_t send(int_t s, const void *data, size_t length, int_t flags); 00276 00277 int_t sendto(int_t s, const void *data, size_t length, 00278 int_t flags, const sockaddr *addr, socklen_t addrlen); 00279 00280 int_t recv(int_t s, void *data, size_t size, int_t flags); 00281 00282 int_t recvfrom(int_t s, void *data, size_t size, 00283 int_t flags, sockaddr *addr, socklen_t *addrlen); 00284 00285 int_t getsockname(int_t s, sockaddr *addr, socklen_t *addrlen); 00286 int_t getpeername(int_t s, sockaddr *addr, socklen_t *addrlen); 00287 00288 int_t setsockopt(int_t s, int_t level, int_t optname, 00289 const void *optval, socklen_t optlen); 00290 00291 int_t getsockopt(int_t s, int_t level, int_t optname, 00292 void *optval, socklen_t *optlen); 00293 00294 int_t ioctlsocket(int_t s, uint32_t cmd, void *arg); 00295 int_t fcntl(int_t s, int_t cmd, void *arg); 00296 00297 int_t shutdown(int_t s, int_t how); 00298 int_t closesocket(int_t s); 00299 00300 int_t select(int_t nfds, fd_set *readfds, fd_set *writefds, 00301 fd_set *exceptfds, const timeval *timeout); 00302 00303 void selectFdZero(fd_set *fds); 00304 void selectFdSet(fd_set *fds, int_t s); 00305 void selectFdClr(fd_set *fds, int_t s); 00306 int_t selectFdIsSet(fd_set *fds, int_t s); 00307 00308 int_t gethostbyname(const char_t *name, hostent *info); 00309 00310 in_addr_t inet_addr(const char_t *cp); 00311 00312 int_t inet_aton(const char_t *cp, in_addr *inp); 00313 const char_t *inet_ntoa(in_addr in, char_t *cp); 00314 00315 int_t inet_pton(int_t af, const char_t *src, void *dst); 00316 const char_t *inet_ntop(int_t af, const void *src, char_t *dst, socklen_t size); 00317 00318 #endif 00319 00320 #endif 00321
Generated on Tue Jul 12 2022 17:10:12 by
