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.
NetworkStack.h@125:ea3a618e0818, 2016-05-25 (annotated)
- 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?
User | Revision | Line number | New 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 |