Base class for IP Based Networking Libraries

Dependencies:   DnsQuery

Dependents:   TempTower BSDInterfaceTests HelloBSDInterface ESP8266InterfaceTests ... more

For a complete getting started guide see the wiki...

Network Socket API

The Network Socket API provides a common interface for using sockets on network devices. The API provides a simple class-based interface that should be familiar to users experienced with other socket APIs. Additionally, the API provides a simple interface for implementing network devices, making it easy to connect hardware agnostic programs to new devices.

Network Interfaces

The NetworkInterface provides an abstract class for network devices that support sockets. Devices should provide a DeviceInterface class that inherits this interface and adds implementation specific methods for using the device. A NetworkInterface must be provided to a Socket constructor to open a socket on the interface. Currently two subclasses are defined for common devices, EthernetInterface and WiFiInterface.

Sockets

The Socket class is used for managing network sockets. Once opened, the socket provides a pipe through which data can sent and recieved to a specific endpoint. The socket class can be instantiated as either a TCPSocket or a UDPSocket which defines the protocol used for the connection.

Committer:
dkato
Date:
Wed May 25 02:45:51 2016 +0000
Revision:
125:ea3a618e0818
Parent:
123:556a038fdf63
Fix the path of DnsQuery.lib

Who changed what in which revision?

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