ap

Dependencies:   DnsQuery

Dependents:   WizFi310_TCP_Echo_Server_Example

Fork of NetworkSocketAPI by NetworkSocketAPI

Committer:
Christopher Haster
Date:
Tue Apr 19 18:25:12 2016 -0500
Revision:
99:f51358e506c1
Parent:
98:0f614f1d0398
Child:
103:37decbcb1108
Revised stack specific configurations

Adds the following functions for direct configuration of interface
- (set|get)stackopt
- (set|get)sockopt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Christopher Haster 89:b1d417383c0d 1 /* Socket
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 SOCKET_H
Christopher Haster 89:b1d417383c0d 18 #define SOCKET_H
Christopher Haster 89:b1d417383c0d 19
Christopher Haster 89:b1d417383c0d 20 #include "SocketAddress.h"
Christopher Haster 89:b1d417383c0d 21 #include "NetworkInterface.h"
Christopher Haster 89:b1d417383c0d 22
Christopher Haster 89:b1d417383c0d 23 /** Abstract socket class
Christopher Haster 89:b1d417383c0d 24 */
Christopher Haster 89:b1d417383c0d 25 class Socket {
Christopher Haster 89:b1d417383c0d 26 public:
Christopher Haster 89:b1d417383c0d 27 /** Socket lifetime
Christopher Haster 89:b1d417383c0d 28 */
Christopher Haster 89:b1d417383c0d 29 virtual ~Socket();
Christopher Haster 90:0a988e4abb72 30
Christopher Haster 90:0a988e4abb72 31 /** Open the socket
Christopher Haster 90:0a988e4abb72 32 * @param iface Interface to open socket on
Christopher Haster 90:0a988e4abb72 33 */
Christopher Haster 90:0a988e4abb72 34 virtual int open(NetworkInterface *iface) = 0;
Christopher Haster 89:b1d417383c0d 35
Christopher Haster 99:f51358e506c1 36 /** Close the socket
Christopher Haster 99:f51358e506c1 37 */
Christopher Haster 99:f51358e506c1 38 int close();
Christopher Haster 99:f51358e506c1 39
Christopher Haster 98:0f614f1d0398 40 /** Bind a socket to a specific port
Christopher Haster 98:0f614f1d0398 41 * @param port The port to listen for incoming connections on
Christopher Haster 98:0f614f1d0398 42 * @return 0 on success, negative on failure.
Christopher Haster 98:0f614f1d0398 43 */
Christopher Haster 98:0f614f1d0398 44 int bind(uint16_t port);
Christopher Haster 98:0f614f1d0398 45
Christopher Haster 98:0f614f1d0398 46 /** Bind a socket to a specific port
Christopher Haster 98:0f614f1d0398 47 * @param address The null-terminated address to listen for incoming connections on
Christopher Haster 98:0f614f1d0398 48 * @param port The port to listen for incoming connections on
Christopher Haster 98:0f614f1d0398 49 * @return 0 on success, negative on failure.
Christopher Haster 98:0f614f1d0398 50 */
Christopher Haster 98:0f614f1d0398 51 int bind(const char *address, uint16_t port);
Christopher Haster 98:0f614f1d0398 52
Christopher Haster 98:0f614f1d0398 53 /** Bind a socket to a specific port
Christopher Haster 98:0f614f1d0398 54 * @param address The SocketAddress to listen for incoming connections on
Christopher Haster 98:0f614f1d0398 55 * @return 0 on success, negative on failure.
Christopher Haster 98:0f614f1d0398 56 */
Christopher Haster 98:0f614f1d0398 57 int bind(const SocketAddress &address);
Christopher Haster 98:0f614f1d0398 58
Christopher Haster 89:b1d417383c0d 59 /** Set blocking or non-blocking mode of the socket
Christopher Haster 89:b1d417383c0d 60 * @param blocking true for blocking mode, false for non-blocking mode.
Christopher Haster 89:b1d417383c0d 61 */
Christopher Haster 89:b1d417383c0d 62 void set_blocking(bool blocking);
Christopher Haster 89:b1d417383c0d 63
Christopher Haster 89:b1d417383c0d 64 /** Set timeout on a socket operation if blocking behaviour is enabled
Christopher Haster 89:b1d417383c0d 65 * @param timeout timeout in ms
Christopher Haster 89:b1d417383c0d 66 */
Christopher Haster 89:b1d417383c0d 67 void set_timeout(unsigned int timeout);
Christopher Haster 89:b1d417383c0d 68
Christopher Haster 89:b1d417383c0d 69 /* Set socket options
Christopher Haster 99:f51358e506c1 70 * @param level Option level
Christopher Haster 99:f51358e506c1 71 * @param optname Option identifier
Christopher Haster 89:b1d417383c0d 72 * @param optval Option value
Christopher Haster 89:b1d417383c0d 73 * @param optlen Length of the option value
Christopher Haster 89:b1d417383c0d 74 * @return 0 on success, negative on failure
Christopher Haster 99:f51358e506c1 75 */
Christopher Haster 99:f51358e506c1 76 int setsockopt(int level, int optname, const void *optval, unsigned optlen);
Christopher Haster 99:f51358e506c1 77
Christopher Haster 89:b1d417383c0d 78 /* Get socket options
Christopher Haster 99:f51358e506c1 79 * @param level Option level
Christopher Haster 99:f51358e506c1 80 * @param optname Option identifier
Christopher Haster 99:f51358e506c1 81 * @param optval Buffer where to write option value
Christopher Haster 89:b1d417383c0d 82 * @param optlen Length of the option value
Christopher Haster 89:b1d417383c0d 83 * @return 0 on success, negative on failure
Christopher Haster 99:f51358e506c1 84 */
Christopher Haster 99:f51358e506c1 85 int getsockopt(int level, int optname, void *optval, unsigned *optlen);
Christopher Haster 89:b1d417383c0d 86
Christopher Haster 92:dd5f19874adf 87 /** Register a callback on state change of the socket
Christopher Haster 92:dd5f19874adf 88 * @param callback Function to call on state change
Christopher Haster 92:dd5f19874adf 89 * @note Callback may be called in an interrupt context.
Christopher Haster 92:dd5f19874adf 90 * The callback should not perform long operations
Christopher Haster 92:dd5f19874adf 91 * such as recv or send calls.
Christopher Haster 92:dd5f19874adf 92 */
Christopher Haster 92:dd5f19874adf 93 void attach(FunctionPointer callback);
Christopher Haster 92:dd5f19874adf 94
Christopher Haster 92:dd5f19874adf 95 template <typename T, typename M>
Christopher Haster 92:dd5f19874adf 96 void attach(T *tptr, M mptr) {
Christopher Haster 92:dd5f19874adf 97 attach(FunctionPointer(tptr, mptr));
Christopher Haster 92:dd5f19874adf 98 }
Christopher Haster 92:dd5f19874adf 99
Christopher Haster 89:b1d417383c0d 100 protected:
Christopher Haster 90:0a988e4abb72 101 Socket();
Christopher Haster 90:0a988e4abb72 102 int open(NetworkInterface *iface, nsapi_protocol_t proto);
Christopher Haster 89:b1d417383c0d 103
Christopher Haster 89:b1d417383c0d 104 static void thunk(void *);
Christopher Haster 89:b1d417383c0d 105
Christopher Haster 89:b1d417383c0d 106 NetworkInterface *_iface;
Christopher Haster 89:b1d417383c0d 107 void *_socket;
Christopher Haster 89:b1d417383c0d 108 bool _blocking;
Christopher Haster 89:b1d417383c0d 109 unsigned _timeout;
Christopher Haster 92:dd5f19874adf 110 FunctionPointer _callback;
Christopher Haster 89:b1d417383c0d 111 };
Christopher Haster 89:b1d417383c0d 112
Christopher Haster 89:b1d417383c0d 113 #endif