1 #ifndef _sw_socket_h 2 #define _sw_socket_h 3 4 /* 5 * Copyright 2003, 2004 Porchdog Software. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without modification, 8 * are permitted provided that the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, 11 * this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright notice, 13 * this list of conditions and the following disclaimer in the documentation 14 * and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY PORCHDOG SOFTWARE ``AS IS'' AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 * IN NO EVENT SHALL THE HOWL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 24 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 25 * OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 * The views and conclusions contained in the software and documentation are those 28 * of the authors and should not be interpreted as representing official policies, 29 * either expressed or implied, of Porchdog Software. 30 */ 31 32 #include <salt/platform.h> 33 #include <salt/address.h> 34 35 36 #ifdef __cplusplus 37 extern "C" 38 { 39 #endif 40 41 42 struct _sw_socket; 43 typedef struct _sw_socket * sw_socket; 44 struct _sw_socket_options; 45 typedef struct _sw_socket_options * sw_socket_options; 46 typedef sw_uint16 sw_port; 47 48 49 50 sw_result HOWL_API 51 sw_tcp_socket_init( 52 sw_socket * self); 53 54 55 sw_result HOWL_API 56 sw_tcp_socket_init_with_desc( 57 sw_socket * self, 58 sw_sockdesc_t desc); 59 60 61 sw_result HOWL_API 62 sw_udp_socket_init( 63 sw_socket * self); 64 65 66 sw_result HOWL_API 67 sw_multicast_socket_init( 68 sw_socket * self); 69 70 71 sw_result HOWL_API 72 sw_socket_fina( 73 sw_socket self); 74 75 76 sw_result HOWL_API 77 sw_socket_bind( 78 sw_socket self, 79 sw_ipv4_address address, 80 sw_port port); 81 82 83 sw_result HOWL_API 84 sw_socket_join_multicast_group( 85 sw_socket self, 86 sw_ipv4_address local_address, 87 sw_ipv4_address multicast_address, 88 sw_uint32 ttl); 89 90 91 sw_result HOWL_API 92 sw_socket_leave_multicast_group( 93 sw_socket self); 94 95 96 sw_result HOWL_API 97 sw_socket_listen( 98 sw_socket self, 99 int qsize); 100 101 102 sw_result HOWL_API 103 sw_socket_connect( 104 sw_socket self, 105 sw_ipv4_address address, 106 sw_port port); 107 108 109 sw_result HOWL_API 110 sw_socket_accept( 111 sw_socket self, 112 sw_socket * socket); 113 114 115 sw_result HOWL_API 116 sw_socket_send( 117 sw_socket self, 118 sw_octets buffer, 119 sw_size_t len, 120 sw_size_t * bytesWritten); 121 122 123 sw_result HOWL_API 124 sw_socket_sendto( 125 sw_socket self, 126 sw_octets buffer, 127 sw_size_t len, 128 sw_size_t * bytesWritten, 129 sw_ipv4_address to, 130 sw_port port); 131 132 133 sw_result HOWL_API 134 sw_socket_recv( 135 sw_socket self, 136 sw_octets buffer, 137 sw_size_t max, 138 sw_size_t * len); 139 140 141 sw_result HOWL_API 142 sw_socket_recvfrom( 143 sw_socket self, 144 sw_octets buffer, 145 sw_size_t max, 146 sw_size_t * len, 147 sw_ipv4_address * from, 148 sw_port * port, 149 sw_ipv4_address * dest, 150 sw_uint32 * interface_index); 151 152 153 sw_result HOWL_API 154 sw_socket_set_blocking_mode( 155 sw_socket self, 156 sw_bool blocking_mode); 157 158 159 sw_result HOWL_API 160 sw_socket_set_options( 161 sw_socket self, 162 sw_socket_options options); 163 164 165 sw_ipv4_address HOWL_API 166 sw_socket_ipv4_address( 167 sw_socket self); 168 169 170 sw_port HOWL_API 171 sw_socket_port( 172 sw_socket self); 173 174 175 sw_sockdesc_t HOWL_API 176 sw_socket_desc( 177 sw_socket self); 178 179 180 sw_result HOWL_API 181 sw_socket_close( 182 sw_socket self); 183 184 185 sw_result HOWL_API 186 sw_socket_options_init( 187 sw_socket_options * self); 188 189 190 sw_result HOWL_API 191 sw_socket_options_fina( 192 sw_socket_options self); 193 194 195 sw_result HOWL_API 196 sw_socket_options_set_debug( 197 sw_socket_options self, 198 sw_bool val); 199 200 201 sw_result HOWL_API 202 sw_socket_options_set_nodelay( 203 sw_socket_options self, 204 sw_bool val); 205 206 207 sw_result HOWL_API 208 sw_socket_options_set_dontroute( 209 sw_socket_options self, 210 sw_bool val); 211 212 213 sw_result HOWL_API 214 sw_socket_options_set_keepalive( 215 sw_socket_options self, 216 sw_bool val); 217 218 219 sw_result HOWL_API 220 sw_socket_options_set_linger( 221 sw_socket_options self, 222 sw_bool onoff, 223 sw_uint32 linger); 224 225 226 sw_result HOWL_API 227 sw_socket_options_set_reuseaddr( 228 sw_socket_options self, 229 sw_bool val); 230 231 232 sw_result HOWL_API 233 sw_socket_options_set_rcvbuf( 234 sw_socket_options self, 235 sw_uint32 val); 236 237 238 sw_result HOWL_API 239 sw_socket_options_set_sndbuf( 240 sw_socket_options self, 241 sw_uint32 val); 242 243 244 int 245 sw_socket_error_code(void); 246 247 248 #define SW_E_SOCKET_BASE 0x80000200 249 #define SW_E_SOCKET (SW_E_SOCKET_BASE) + 1 250 #define SW_E_BIND (SW_E_SOCKET_BASE) + 2 251 #define SW_E_GETSOCKNAME (SW_E_SOCKET_BASE) + 3 252 #define SW_E_ADD_MEMBERSHIP (SW_E_SOCKET_BASE) + 4 253 #define SW_E_MULTICAST_TTL (SW_E_SOCKET_BASE) + 5 254 #define SW_E_NOCONNECTION (SW_E_SOCKET_BASE) + 6 255 #define SW_E_INPROGRESS (SW_E_SOCKET_BASE) + 7 256 257 258 #ifdef __cplusplus 259 } 260 #endif 261 262 263 #endif 264