ap

Dependencies:   DnsQuery

Dependents:   WizFi310_TCP_Echo_Server_Example

Fork of NetworkSocketAPI by NetworkSocketAPI

Committer:
Christopher Haster
Date:
Tue Apr 19 18:23:29 2016 -0500
Revision:
92:dd5f19874adf
Parent:
91:cad29ce6a01c
Child:
98:0f614f1d0398
Move to single state-change interrupt

Pros
- Easier to implement
- More similar to SIGIO in BDS sockets

Cons
- Less information, but this information had a high risk of being
faulty/spurious

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 89:b1d417383c0d 36 /** Set blocking or non-blocking mode of the socket
Christopher Haster 89:b1d417383c0d 37 * @param blocking true for blocking mode, false for non-blocking mode.
Christopher Haster 89:b1d417383c0d 38 */
Christopher Haster 89:b1d417383c0d 39 void set_blocking(bool blocking);
Christopher Haster 89:b1d417383c0d 40
Christopher Haster 89:b1d417383c0d 41 /** Set timeout on a socket operation if blocking behaviour is enabled
Christopher Haster 89:b1d417383c0d 42 * @param timeout timeout in ms
Christopher Haster 89:b1d417383c0d 43 */
Christopher Haster 89:b1d417383c0d 44 void set_timeout(unsigned int timeout);
Christopher Haster 89:b1d417383c0d 45
Christopher Haster 89:b1d417383c0d 46 /* Set socket options
Christopher Haster 89:b1d417383c0d 47 * @param optname Option ID
Christopher Haster 89:b1d417383c0d 48 * @param optval Option value
Christopher Haster 89:b1d417383c0d 49 * @param optlen Length of the option value
Christopher Haster 89:b1d417383c0d 50 * @return 0 on success, negative on failure
Christopher Haster 89:b1d417383c0d 51 */
Christopher Haster 89:b1d417383c0d 52 int set_option(int optname, const void *optval, unsigned optlen);
Christopher Haster 89:b1d417383c0d 53
Christopher Haster 89:b1d417383c0d 54 /* Get socket options
Christopher Haster 89:b1d417383c0d 55 * @param optname Option ID
Christopher Haster 89:b1d417383c0d 56 * @param optval Buffer pointer where to write the option value
Christopher Haster 89:b1d417383c0d 57 * @param optlen Length of the option value
Christopher Haster 89:b1d417383c0d 58 * @return 0 on success, negative on failure
Christopher Haster 89:b1d417383c0d 59 */
Christopher Haster 89:b1d417383c0d 60 int get_option(int optname, void *optval, unsigned *optlen);
Christopher Haster 89:b1d417383c0d 61
Christopher Haster 89:b1d417383c0d 62 /** Close the socket
Christopher Haster 89:b1d417383c0d 63 */
Christopher Haster 91:cad29ce6a01c 64 int close();
Christopher Haster 89:b1d417383c0d 65
Christopher Haster 92:dd5f19874adf 66 /** Register a callback on state change of the socket
Christopher Haster 92:dd5f19874adf 67 * @param callback Function to call on state change
Christopher Haster 92:dd5f19874adf 68 * @note Callback may be called in an interrupt context.
Christopher Haster 92:dd5f19874adf 69 * The callback should not perform long operations
Christopher Haster 92:dd5f19874adf 70 * such as recv or send calls.
Christopher Haster 92:dd5f19874adf 71 */
Christopher Haster 92:dd5f19874adf 72 void attach(FunctionPointer callback);
Christopher Haster 92:dd5f19874adf 73
Christopher Haster 92:dd5f19874adf 74 template <typename T, typename M>
Christopher Haster 92:dd5f19874adf 75 void attach(T *tptr, M mptr) {
Christopher Haster 92:dd5f19874adf 76 attach(FunctionPointer(tptr, mptr));
Christopher Haster 92:dd5f19874adf 77 }
Christopher Haster 92:dd5f19874adf 78
Christopher Haster 89:b1d417383c0d 79 protected:
Christopher Haster 90:0a988e4abb72 80 Socket();
Christopher Haster 90:0a988e4abb72 81 int open(NetworkInterface *iface, nsapi_protocol_t proto);
Christopher Haster 89:b1d417383c0d 82
Christopher Haster 89:b1d417383c0d 83 static void thunk(void *);
Christopher Haster 89:b1d417383c0d 84
Christopher Haster 89:b1d417383c0d 85 NetworkInterface *_iface;
Christopher Haster 89:b1d417383c0d 86 void *_socket;
Christopher Haster 89:b1d417383c0d 87 bool _blocking;
Christopher Haster 89:b1d417383c0d 88 unsigned _timeout;
Christopher Haster 92:dd5f19874adf 89 FunctionPointer _callback;
Christopher Haster 89:b1d417383c0d 90 };
Christopher Haster 89:b1d417383c0d 91
Christopher Haster 89:b1d417383c0d 92 #endif