NetworkSocketAPI

Dependencies:   DnsQuery

Dependents:   HelloWizFi250Interface

Fork of NetworkSocketAPI by NetworkSocketAPI

Committer:
Christopher Haster
Date:
Tue Apr 19 18:24:57 2016 -0500
Revision:
98:0f614f1d0398
Parent:
92:dd5f19874adf
Child:
99:f51358e506c1
Move bind to Socket

Bind can operate on any IP socket and is not specific to a protocol

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