NetworkSocketAPI

Dependencies:   DnsQuery

Dependents:   HelloWizFi250Interface

Fork of NetworkSocketAPI by NetworkSocketAPI

Committer:
Christopher Haster
Date:
Tue Apr 19 18:26:21 2016 -0500
Revision:
104:d28d8b508e7c
Parent:
103:37decbcb1108
Revised documentation for Interface classes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Christopher Haster 103:37decbcb1108 1 /* NetworkInterface
Christopher Haster 89:b1d417383c0d 2 * Copyright (c) 2015 ARM Limited
Christopher Haster 89:b1d417383c0d 3 *
Christopher Haster 89:b1d417383c0d 4 * Licensed under the Apache License, Version 2.0 (the "License");
Christopher Haster 89:b1d417383c0d 5 * you may not use this file except in compliance with the License.
Christopher Haster 89:b1d417383c0d 6 * You may obtain a copy of the License at
Christopher Haster 89:b1d417383c0d 7 *
Christopher Haster 89:b1d417383c0d 8 * http://www.apache.org/licenses/LICENSE-2.0
Christopher Haster 89:b1d417383c0d 9 *
Christopher Haster 89:b1d417383c0d 10 * Unless required by applicable law or agreed to in writing, software
Christopher Haster 89:b1d417383c0d 11 * distributed under the License is distributed on an "AS IS" BASIS,
Christopher Haster 89:b1d417383c0d 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Christopher Haster 89:b1d417383c0d 13 * See the License for the specific language governing permissions and
Christopher Haster 89:b1d417383c0d 14 * limitations under the License.
Christopher Haster 89:b1d417383c0d 15 */
Christopher Haster 89:b1d417383c0d 16
Christopher Haster 89:b1d417383c0d 17 #ifndef NETWORK_INTERFACE_H
Christopher Haster 89:b1d417383c0d 18 #define NETWORK_INTERFACE_H
Christopher Haster 89:b1d417383c0d 19
Christopher Haster 89:b1d417383c0d 20 #include "mbed.h"
Christopher Haster 89:b1d417383c0d 21 #include "SocketAddress.h"
Christopher Haster 89:b1d417383c0d 22
Christopher Haster 94:644df37bb05b 23
Christopher Haster 101:9caa935c3baa 24 /** Enum of standardized error codes
Christopher Haster 101:9caa935c3baa 25 *
Christopher Haster 101:9caa935c3baa 26 * Valid error codes have negative values and may
Christopher Haster 101:9caa935c3baa 27 * be returned by any network operation.
Christopher Haster 101:9caa935c3baa 28 *
Christopher Haster 96:656011e49d9f 29 * @enum nsapi_error_t
Christopher Haster 89:b1d417383c0d 30 */
Christopher Haster 89:b1d417383c0d 31 enum nsapi_error_t {
Christopher Haster 89:b1d417383c0d 32 NSAPI_ERROR_WOULD_BLOCK = -3001, /*!< no data is not available but call is non-blocking */
Christopher Haster 89:b1d417383c0d 33 NSAPI_ERROR_UNSUPPORTED = -3002, /*!< unsupported configuration */
Christopher Haster 89:b1d417383c0d 34 NSAPI_ERROR_NO_CONNECTION = -3003, /*!< not connected to a network */
Christopher Haster 89:b1d417383c0d 35 NSAPI_ERROR_NO_SOCKET = -3004, /*!< socket not available for use */
Christopher Haster 89:b1d417383c0d 36 NSAPI_ERROR_NO_ADDRESS = -3005, /*!< IP address is not known */
Christopher Haster 89:b1d417383c0d 37 NSAPI_ERROR_NO_MEMORY = -3006, /*!< memory resource not available */
Christopher Haster 89:b1d417383c0d 38 NSAPI_ERROR_DNS_FAILURE = -3007, /*!< DNS failed to complete successfully */
Christopher Haster 89:b1d417383c0d 39 NSAPI_ERROR_DHCP_FAILURE = -3008, /*!< DHCP failed to complete successfully */
Christopher Haster 89:b1d417383c0d 40 NSAPI_ERROR_AUTH_FAILURE = -3009, /*!< connection to access point faield */
Christopher Haster 89:b1d417383c0d 41 NSAPI_ERROR_DEVICE_ERROR = -3010, /*!< failure interfacing with the network procesor */
Christopher Haster 89:b1d417383c0d 42 };
Christopher Haster 89:b1d417383c0d 43
Christopher Haster 89:b1d417383c0d 44 /** Enum of socket protocols
Christopher Haster 101:9caa935c3baa 45 *
Christopher Haster 101:9caa935c3baa 46 * The socket protocol specifies a particular protocol to
Christopher Haster 101:9caa935c3baa 47 * be used with a newly created socket.
Christopher Haster 101:9caa935c3baa 48 *
Christopher Haster 104:d28d8b508e7c 49 * @enum nsapi_protocol_t
Christopher Haster 89:b1d417383c0d 50 */
Christopher Haster 89:b1d417383c0d 51 enum nsapi_protocol_t {
Christopher Haster 89:b1d417383c0d 52 NSAPI_TCP, /*!< Socket is of TCP type */
Christopher Haster 89:b1d417383c0d 53 NSAPI_UDP, /*!< Socket is of UDP type */
Christopher Haster 89:b1d417383c0d 54 };
Christopher Haster 89:b1d417383c0d 55
Christopher Haster 94:644df37bb05b 56 /** Maximum size of MAC address representation
Christopher Haster 94:644df37bb05b 57 */
Christopher Haster 94:644df37bb05b 58 #define NSAPI_MAC_SIZE 18
Christopher Haster 94:644df37bb05b 59
Christopher Haster 94:644df37bb05b 60 /** Maximum number of bytes for MAC address
Christopher Haster 94:644df37bb05b 61 */
Christopher Haster 94:644df37bb05b 62 #define NSAPI_MAC_BYTES 6
Christopher Haster 94:644df37bb05b 63
Christopher Haster 94:644df37bb05b 64
Christopher Haster 89:b1d417383c0d 65 /** NetworkInterface class
Christopher Haster 101:9caa935c3baa 66 *
Christopher Haster 101:9caa935c3baa 67 * Common interface that is shared between hardware that
Christopher Haster 101:9caa935c3baa 68 * can connect to a network over IP. By implementing the
Christopher Haster 101:9caa935c3baa 69 * NetworkInterface, a network stack can be used as a target
Christopher Haster 101:9caa935c3baa 70 * for instantiating network sockets.
Christopher Haster 89:b1d417383c0d 71 */
Christopher Haster 89:b1d417383c0d 72 class NetworkInterface
Christopher Haster 89:b1d417383c0d 73 {
Christopher Haster 89:b1d417383c0d 74 public:
Christopher Haster 89:b1d417383c0d 75 virtual ~NetworkInterface() {};
Christopher Haster 89:b1d417383c0d 76
Christopher Haster 104:d28d8b508e7c 77 /** Get the local IP address
Christopher Haster 101:9caa935c3baa 78 *
Christopher Haster 104:d28d8b508e7c 79 * @return Null-terminated representation of the local IP address
Christopher Haster 104:d28d8b508e7c 80 * or null if not yet connected
Christopher Haster 89:b1d417383c0d 81 */
Christopher Haster 89:b1d417383c0d 82 virtual const char *get_ip_address() = 0;
Christopher Haster 89:b1d417383c0d 83
Christopher Haster 104:d28d8b508e7c 84 /** Get the local MAC address
Christopher Haster 101:9caa935c3baa 85 *
Christopher Haster 104:d28d8b508e7c 86 * @return Null-terminated representation of the local MAC address
Christopher Haster 89:b1d417383c0d 87 */
Christopher Haster 89:b1d417383c0d 88 virtual const char *get_mac_address() = 0;
Christopher Haster 89:b1d417383c0d 89
Christopher Haster 104:d28d8b508e7c 90 /** Translates a hostname to an IP address
Christopher Haster 101:9caa935c3baa 91 *
Christopher Haster 104:d28d8b508e7c 92 * The hostname may be either a domain name or an IP address. If the
Christopher Haster 104:d28d8b508e7c 93 * hostname is an IP address, no network transactions will be performed.
Christopher Haster 104:d28d8b508e7c 94 *
Christopher Haster 104:d28d8b508e7c 95 * If no stack-specific DNS resolution is provided, the hostname
Christopher Haster 101:9caa935c3baa 96 * will be resolve using a UDP socket on the stack.
Christopher Haster 101:9caa935c3baa 97 *
Christopher Haster 95:b3c679f20d13 98 * @param address Destination for the host SocketAddress
Christopher Haster 104:d28d8b508e7c 99 * @param host Hostname to resolve
Christopher Haster 101:9caa935c3baa 100 * @return 0 on success, negative error code on failure
Christopher Haster 89:b1d417383c0d 101 */
Christopher Haster 101:9caa935c3baa 102 virtual int gethostbyname(SocketAddress *address, const char *host);
Christopher Haster 89:b1d417383c0d 103
Christopher Haster 101:9caa935c3baa 104 /* Set stack-specific stack options
Christopher Haster 101:9caa935c3baa 105 *
Christopher Haster 101:9caa935c3baa 106 * The setstackopt allow an application to pass stack-specific hints
Christopher Haster 101:9caa935c3baa 107 * to the underlying stack. For unsupported options,
Christopher Haster 101:9caa935c3baa 108 * NSAPI_ERROR_UNSUPPORTED is returned and the stack is unmodified.
Christopher Haster 101:9caa935c3baa 109 *
Christopher Haster 101:9caa935c3baa 110 * @param level Stack-specific protocol level
Christopher Haster 101:9caa935c3baa 111 * @param optname Stack-specific option identifier
Christopher Haster 99:f51358e506c1 112 * @param optval Option value
Christopher Haster 99:f51358e506c1 113 * @param optlen Length of the option value
Christopher Haster 101:9caa935c3baa 114 * @return 0 on success, negative error code on failure
Christopher Haster 99:f51358e506c1 115 */
Christopher Haster 99:f51358e506c1 116 virtual int setstackopt(int level, int optname, const void *optval, unsigned optlen);
Christopher Haster 99:f51358e506c1 117
Christopher Haster 101:9caa935c3baa 118 /* Get stack-specific stack options
Christopher Haster 101:9caa935c3baa 119 *
Christopher Haster 101:9caa935c3baa 120 * The getstackopt allow an application to retrieve stack-specific hints
Christopher Haster 101:9caa935c3baa 121 * from the underlying stack. For unsupported options,
Christopher Haster 101:9caa935c3baa 122 * NSAPI_ERROR_UNSUPPORTED is returned and optval is unmodified.
Christopher Haster 101:9caa935c3baa 123 *
Christopher Haster 101:9caa935c3baa 124 * @param level Stack-specific protocol level
Christopher Haster 101:9caa935c3baa 125 * @param optname Stack-specific option identifier
Christopher Haster 101:9caa935c3baa 126 * @param optval Destination for option value
Christopher Haster 99:f51358e506c1 127 * @param optlen Length of the option value
Christopher Haster 101:9caa935c3baa 128 * @return 0 on success, negative error code on failure
Christopher Haster 99:f51358e506c1 129 */
Christopher Haster 99:f51358e506c1 130 virtual int getstackopt(int level, int optname, void *optval, unsigned *optlen);
Christopher Haster 99:f51358e506c1 131
Christopher Haster 89:b1d417383c0d 132 protected:
Christopher Haster 89:b1d417383c0d 133 friend class Socket;
Christopher Haster 89:b1d417383c0d 134 friend class UDPSocket;
Christopher Haster 89:b1d417383c0d 135 friend class TCPSocket;
Christopher Haster 89:b1d417383c0d 136 friend class TCPServer;
Christopher Haster 89:b1d417383c0d 137
Christopher Haster 101:9caa935c3baa 138 /** Opens a socket
Christopher Haster 101:9caa935c3baa 139 *
Christopher Haster 103:37decbcb1108 140 * Creates a network socket and stores it in the specified handle.
Christopher Haster 103:37decbcb1108 141 * The handle must be passed to following calls on the socket.
Christopher Haster 101:9caa935c3baa 142 *
Christopher Haster 101:9caa935c3baa 143 * A stack may have a finite number of sockets, in this case
Christopher Haster 101:9caa935c3baa 144 * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
Christopher Haster 101:9caa935c3baa 145 *
Christopher Haster 101:9caa935c3baa 146 * @param handle Destination for the handle to a newly created socket
Christopher Haster 101:9caa935c3baa 147 * @param proto Protocol of socket to open, NSAPI_TCP or NSAPI_UDP
Christopher Haster 101:9caa935c3baa 148 * @return 0 on success, negative error code on failure
Christopher Haster 89:b1d417383c0d 149 */
Christopher Haster 93:65a9f84862f0 150 virtual int socket_open(void **handle, nsapi_protocol_t proto) = 0;
Christopher Haster 89:b1d417383c0d 151
Christopher Haster 93:65a9f84862f0 152 /** Close the socket
Christopher Haster 101:9caa935c3baa 153 *
Christopher Haster 103:37decbcb1108 154 * Closes any open connection and deallocates any memory associated
Christopher Haster 103:37decbcb1108 155 * with the socket.
Christopher Haster 101:9caa935c3baa 156 *
Christopher Haster 93:65a9f84862f0 157 * @param handle Socket handle
Christopher Haster 101:9caa935c3baa 158 * @return 0 on success, negative error code on failure
Christopher Haster 89:b1d417383c0d 159 */
Christopher Haster 93:65a9f84862f0 160 virtual int socket_close(void *handle) = 0;
Christopher Haster 89:b1d417383c0d 161
Christopher Haster 101:9caa935c3baa 162 /** Bind a specific address to a socket
Christopher Haster 101:9caa935c3baa 163 *
Christopher Haster 101:9caa935c3baa 164 * Binding a socket specifies the address and port on which to recieve
Christopher Haster 101:9caa935c3baa 165 * data. If the IP address is zeroed, only the port is bound.
Christopher Haster 101:9caa935c3baa 166 *
Christopher Haster 89:b1d417383c0d 167 * @param handle Socket handle
Christopher Haster 101:9caa935c3baa 168 * @param address Local address to bind
Christopher Haster 101:9caa935c3baa 169 * @return 0 on success, negative error code on failure.
Christopher Haster 89:b1d417383c0d 170 */
Christopher Haster 96:656011e49d9f 171 virtual int socket_bind(void *handle, const SocketAddress &address) = 0;
Christopher Haster 89:b1d417383c0d 172
Christopher Haster 101:9caa935c3baa 173 /** Listen for connections on a TCP socket
Christopher Haster 101:9caa935c3baa 174 *
Christopher Haster 101:9caa935c3baa 175 * Marks the socket as a passive socket that can be used to accept
Christopher Haster 101:9caa935c3baa 176 * incoming connections.
Christopher Haster 101:9caa935c3baa 177 *
Christopher Haster 89:b1d417383c0d 178 * @param handle Socket handle
Christopher Haster 101:9caa935c3baa 179 * @param backlog Number of pending connections that can be queued
Christopher Haster 103:37decbcb1108 180 * simultaneously
Christopher Haster 101:9caa935c3baa 181 * @return 0 on success, negative error code on failure
Christopher Haster 89:b1d417383c0d 182 */
Christopher Haster 89:b1d417383c0d 183 virtual int socket_listen(void *handle, int backlog) = 0;
Christopher Haster 89:b1d417383c0d 184
Christopher Haster 101:9caa935c3baa 185 /** Connects TCP socket to a remote host
Christopher Haster 101:9caa935c3baa 186 *
Christopher Haster 101:9caa935c3baa 187 * Initiates a connection to a remote server specified by the
Christopher Haster 101:9caa935c3baa 188 * indicated address.
Christopher Haster 101:9caa935c3baa 189 *
Christopher Haster 89:b1d417383c0d 190 * @param handle Socket handle
Christopher Haster 101:9caa935c3baa 191 * @param address The SocketAddress of the remote host
Christopher Haster 101:9caa935c3baa 192 * @return 0 on success, negative error code on failure
Christopher Haster 89:b1d417383c0d 193 */
Christopher Haster 89:b1d417383c0d 194 virtual int socket_connect(void *handle, const SocketAddress &address) = 0;
Christopher Haster 89:b1d417383c0d 195
Christopher Haster 101:9caa935c3baa 196 /** Accepts a connection on a TCP socket
Christopher Haster 101:9caa935c3baa 197 *
Christopher Haster 101:9caa935c3baa 198 * The server socket must be bound and set to listen for connections.
Christopher Haster 103:37decbcb1108 199 * On a new connection, creates a network socket and stores it in the
Christopher Haster 103:37decbcb1108 200 * specified handle. The handle must be passed to following calls on
Christopher Haster 103:37decbcb1108 201 * the socket.
Christopher Haster 101:9caa935c3baa 202 *
Christopher Haster 101:9caa935c3baa 203 * A stack may have a finite number of sockets, in this case
Christopher Haster 101:9caa935c3baa 204 * NSAPI_ERROR_NO_SOCKET is returned if no socket is available.
Christopher Haster 101:9caa935c3baa 205 *
Christopher Haster 101:9caa935c3baa 206 * This call is non-blocking. If accept would block,
Christopher Haster 101:9caa935c3baa 207 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Christopher Haster 101:9caa935c3baa 208 *
Christopher Haster 101:9caa935c3baa 209 * @param handle Destination for a handle to the newly created sockey
Christopher Haster 93:65a9f84862f0 210 * @param server Socket handle to server to accept from
Christopher Haster 101:9caa935c3baa 211 * @return 0 on success, negative error code on failure
Christopher Haster 89:b1d417383c0d 212 */
Christopher Haster 93:65a9f84862f0 213 virtual int socket_accept(void **handle, void *server) = 0;
Christopher Haster 89:b1d417383c0d 214
Christopher Haster 101:9caa935c3baa 215 /** Send data over a TCP socket
Christopher Haster 101:9caa935c3baa 216 *
Christopher Haster 101:9caa935c3baa 217 * The socket must be connected to a remote host. Returns the number of
Christopher Haster 101:9caa935c3baa 218 * bytes sent from the buffer.
Christopher Haster 101:9caa935c3baa 219 *
Christopher Haster 101:9caa935c3baa 220 * This call is non-blocking. If send would block,
Christopher Haster 101:9caa935c3baa 221 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Christopher Haster 101:9caa935c3baa 222 *
Christopher Haster 89:b1d417383c0d 223 * @param handle Socket handle
Christopher Haster 101:9caa935c3baa 224 * @param data Buffer of data to send to the host
Christopher Haster 101:9caa935c3baa 225 * @param size Size of the buffer in bytes
Christopher Haster 101:9caa935c3baa 226 * @return Number of sent bytes on success, negative error
Christopher Haster 101:9caa935c3baa 227 * code on failure
Christopher Haster 89:b1d417383c0d 228 */
Christopher Haster 89:b1d417383c0d 229 virtual int socket_send(void *handle, const void *data, unsigned size) = 0;
Christopher Haster 89:b1d417383c0d 230
Christopher Haster 101:9caa935c3baa 231 /** Receive data over a TCP socket
Christopher Haster 101:9caa935c3baa 232 *
Christopher Haster 101:9caa935c3baa 233 * The socket must be connected to a remote host. Returns the number of
Christopher Haster 101:9caa935c3baa 234 * bytes received into the buffer.
Christopher Haster 101:9caa935c3baa 235 *
Christopher Haster 101:9caa935c3baa 236 * This call is non-blocking. If recv would block,
Christopher Haster 101:9caa935c3baa 237 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Christopher Haster 101:9caa935c3baa 238 *
Christopher Haster 89:b1d417383c0d 239 * @param handle Socket handle
Christopher Haster 101:9caa935c3baa 240 * @param data Destination buffer for data received from the host
Christopher Haster 101:9caa935c3baa 241 * @param size Size of the buffer in bytes
Christopher Haster 101:9caa935c3baa 242 * @return Number of received bytes on success, negative error
Christopher Haster 101:9caa935c3baa 243 * code on failure
Christopher Haster 89:b1d417383c0d 244 */
Christopher Haster 89:b1d417383c0d 245 virtual int socket_recv(void *handle, void *data, unsigned size) = 0;
Christopher Haster 89:b1d417383c0d 246
Christopher Haster 101:9caa935c3baa 247 /** Send a packet over a UDP socket
Christopher Haster 101:9caa935c3baa 248 *
Christopher Haster 101:9caa935c3baa 249 * Sends data to the specified address. Returns the number of bytes
Christopher Haster 101:9caa935c3baa 250 * sent from the buffer.
Christopher Haster 101:9caa935c3baa 251 *
Christopher Haster 101:9caa935c3baa 252 * This call is non-blocking. If sendto would block,
Christopher Haster 101:9caa935c3baa 253 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Christopher Haster 101:9caa935c3baa 254 *
Christopher Haster 89:b1d417383c0d 255 * @param handle Socket handle
Christopher Haster 101:9caa935c3baa 256 * @param address The SocketAddress of the remote host
Christopher Haster 101:9caa935c3baa 257 * @param data Buffer of data to send to the host
Christopher Haster 101:9caa935c3baa 258 * @param size Size of the buffer in bytes
Christopher Haster 101:9caa935c3baa 259 * @return Number of sent bytes on success, negative error
Christopher Haster 101:9caa935c3baa 260 * code on failure
Christopher Haster 89:b1d417383c0d 261 */
Christopher Haster 89:b1d417383c0d 262 virtual int socket_sendto(void *handle, const SocketAddress &address, const void *data, unsigned size) = 0;
Christopher Haster 89:b1d417383c0d 263
Christopher Haster 101:9caa935c3baa 264 /** Receive a packet over a UDP socket
Christopher Haster 101:9caa935c3baa 265 *
Christopher Haster 101:9caa935c3baa 266 * Receives data and stores the source address in address if address
Christopher Haster 101:9caa935c3baa 267 * is not NULL. Returns the number of bytes received into the buffer.
Christopher Haster 101:9caa935c3baa 268 *
Christopher Haster 101:9caa935c3baa 269 * This call is non-blocking. If recvfrom would block,
Christopher Haster 101:9caa935c3baa 270 * NSAPI_ERROR_WOULD_BLOCK is returned immediately.
Christopher Haster 101:9caa935c3baa 271 *
Christopher Haster 89:b1d417383c0d 272 * @param handle Socket handle
Christopher Haster 101:9caa935c3baa 273 * @param address Destination for the source address or NULL
Christopher Haster 101:9caa935c3baa 274 * @param data Destination buffer for data received from the host
Christopher Haster 101:9caa935c3baa 275 * @param size Size of the buffer in bytes
Christopher Haster 101:9caa935c3baa 276 * @return Number of received bytes on success, negative error
Christopher Haster 101:9caa935c3baa 277 * code on failure
Christopher Haster 89:b1d417383c0d 278 */
Christopher Haster 89:b1d417383c0d 279 virtual int socket_recvfrom(void *handle, SocketAddress *address, void *buffer, unsigned size) = 0;
Christopher Haster 89:b1d417383c0d 280
Christopher Haster 92:dd5f19874adf 281 /** Register a callback on state change of the socket
Christopher Haster 101:9caa935c3baa 282 *
Christopher Haster 101:9caa935c3baa 283 * The specified callback will be called on state changes such as when
Christopher Haster 101:9caa935c3baa 284 * the socket can recv/send/accept successfully and on when an error
Christopher Haster 101:9caa935c3baa 285 * occurs. The callback may also be called spuriously without reason.
Christopher Haster 101:9caa935c3baa 286 *
Christopher Haster 101:9caa935c3baa 287 * The callback may be called in an interrupt context and should not
Christopher Haster 101:9caa935c3baa 288 * perform expensive operations such as recv/send calls.
Christopher Haster 101:9caa935c3baa 289 *
Christopher Haster 89:b1d417383c0d 290 * @param handle Socket handle
Christopher Haster 92:dd5f19874adf 291 * @param callback Function to call on state change
Christopher Haster 92:dd5f19874adf 292 * @param data Argument to pass to callback
Christopher Haster 89:b1d417383c0d 293 */
Christopher Haster 92:dd5f19874adf 294 virtual void socket_attach(void *handle, void (*callback)(void *), void *data) = 0;
Christopher Haster 99:f51358e506c1 295
Christopher Haster 103:37decbcb1108 296 /* Set stack-specific socket options
Christopher Haster 101:9caa935c3baa 297 *
Christopher Haster 101:9caa935c3baa 298 * The setsockopt allow an application to pass stack-specific hints
Christopher Haster 101:9caa935c3baa 299 * to the underlying stack. For unsupported options,
Christopher Haster 101:9caa935c3baa 300 * NSAPI_ERROR_UNSUPPORTED is returned and the socket is unmodified.
Christopher Haster 101:9caa935c3baa 301 *
Christopher Haster 99:f51358e506c1 302 * @param handle Socket handle
Christopher Haster 101:9caa935c3baa 303 * @param level Stack-specific protocol level
Christopher Haster 101:9caa935c3baa 304 * @param optname Stack-specific option identifier
Christopher Haster 99:f51358e506c1 305 * @param optval Option value
Christopher Haster 99:f51358e506c1 306 * @param optlen Length of the option value
Christopher Haster 101:9caa935c3baa 307 * @return 0 on success, negative error code on failure
Christopher Haster 99:f51358e506c1 308 */
Christopher Haster 99:f51358e506c1 309 virtual int setsockopt(void *handle, int level, int optname, const void *optval, unsigned optlen);
Christopher Haster 99:f51358e506c1 310
Christopher Haster 101:9caa935c3baa 311 /* Get stack-specific socket options
Christopher Haster 101:9caa935c3baa 312 *
Christopher Haster 101:9caa935c3baa 313 * The getstackopt allow an application to retrieve stack-specific hints
Christopher Haster 101:9caa935c3baa 314 * from the underlying stack. For unsupported options,
Christopher Haster 101:9caa935c3baa 315 * NSAPI_ERROR_UNSUPPORTED is returned and optval is unmodified.
Christopher Haster 101:9caa935c3baa 316 *
Christopher Haster 99:f51358e506c1 317 * @param handle Socket handle
Christopher Haster 101:9caa935c3baa 318 * @param level Stack-specific protocol level
Christopher Haster 101:9caa935c3baa 319 * @param optname Stack-specific option identifier
Christopher Haster 101:9caa935c3baa 320 * @param optval Destination for option value
Christopher Haster 99:f51358e506c1 321 * @param optlen Length of the option value
Christopher Haster 101:9caa935c3baa 322 * @return 0 on success, negative error code on failure
Christopher Haster 99:f51358e506c1 323 */
Christopher Haster 99:f51358e506c1 324 virtual int getsockopt(void *handle, int level, int optname, void *optval, unsigned *optlen);
Christopher Haster 89:b1d417383c0d 325 };
Christopher Haster 89:b1d417383c0d 326
Christopher Haster 89:b1d417383c0d 327 #endif