ap

Dependencies:   DnsQuery

Dependents:   WizFi310_TCP_Echo_Server_Example

Fork of NetworkSocketAPI by NetworkSocketAPI

Committer:
Christopher Haster
Date:
Tue Apr 05 06:22:10 2016 -0500
Revision:
74:ef2470ca328b
Parent:
72:6a8b52ee83ed
Child:
75:dea0cdb42241
Minor improvements to API

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Christopher Haster 72:6a8b52ee83ed 1 /* Copyright (C) 2012 mbed.org, MIT License
Christopher Haster 72:6a8b52ee83ed 2 *
Christopher Haster 72:6a8b52ee83ed 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Christopher Haster 72:6a8b52ee83ed 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
Christopher Haster 72:6a8b52ee83ed 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
Christopher Haster 72:6a8b52ee83ed 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
Christopher Haster 72:6a8b52ee83ed 7 * furnished to do so, subject to the following conditions:
Christopher Haster 72:6a8b52ee83ed 8 *
Christopher Haster 72:6a8b52ee83ed 9 * The above copyright notice and this permission notice shall be included in all copies or
Christopher Haster 72:6a8b52ee83ed 10 * substantial portions of the Software.
Christopher Haster 72:6a8b52ee83ed 11 *
Christopher Haster 72:6a8b52ee83ed 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
Christopher Haster 72:6a8b52ee83ed 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Christopher Haster 72:6a8b52ee83ed 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
Christopher Haster 72:6a8b52ee83ed 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Christopher Haster 72:6a8b52ee83ed 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Christopher Haster 72:6a8b52ee83ed 17 */
Christopher Haster 72:6a8b52ee83ed 18 #ifndef SOCKET_H
Christopher Haster 72:6a8b52ee83ed 19 #define SOCKET_H
Christopher Haster 72:6a8b52ee83ed 20
Christopher Haster 74:ef2470ca328b 21 /** Maximum storage needed for IP addresses
Christopher Haster 74:ef2470ca328b 22 */
Christopher Haster 74:ef2470ca328b 23 #define NS_API_SIZE 16
Christopher Haster 74:ef2470ca328b 24
Christopher Haster 74:ef2470ca328b 25 /**
Christopher Haster 74:ef2470ca328b 26 * @enum ns_error_t
Christopher Haster 74:ef2470ca328b 27 * @brief enum of standardized error codes
Christopher Haster 74:ef2470ca328b 28 */
Christopher Haster 74:ef2470ca328b 29 enum ns_error_t {
Christopher Haster 74:ef2470ca328b 30 NS_ERROR_WOULD_BLOCK = -3001, /*!< no data is not available but call is non-blocking */
Christopher Haster 74:ef2470ca328b 31 NS_ERROR_UNSUPPORTED = -3002, /*!< unsupported configuration */
Christopher Haster 74:ef2470ca328b 32 NS_ERROR_NO_CONNECTION = -3003, /*!< not connected to a network */
Christopher Haster 74:ef2470ca328b 33 NS_ERROR_NO_SOCKET = -3004, /*!< socket not available for use */
Christopher Haster 74:ef2470ca328b 34 NS_ERROR_NO_ADDRESS = -3005, /*!< IP address is not known */
Christopher Haster 74:ef2470ca328b 35 NS_ERROR_NO_MEMORY = -3006, /*!< memory resource not available */
Christopher Haster 74:ef2470ca328b 36 NS_ERROR_DNS_FAILURE = -3007, /*!< DNS failed to complete successfully */
Christopher Haster 74:ef2470ca328b 37 NS_ERROR_DHCP_FAILURE = -3008, /*!< DHCP failed to complete successfully */
Christopher Haster 74:ef2470ca328b 38 NS_ERROR_AUTH_FAILURE = -3009, /*!< connection to access point faield */
Christopher Haster 74:ef2470ca328b 39 NS_ERROR_DEVICE_ERROR = -3010, /*!< failure interfacing with the network procesor */
Christopher Haster 74:ef2470ca328b 40 };
Christopher Haster 74:ef2470ca328b 41
Christopher Haster 74:ef2470ca328b 42 /**
Christopher Haster 74:ef2470ca328b 43 * @enum ns_opt_t
Christopher Haster 74:ef2470ca328b 44 * @brief enum of available options
Christopher Haster 74:ef2470ca328b 45 */
Christopher Haster 74:ef2470ca328b 46 enum ns_opt_t {
Christopher Haster 74:ef2470ca328b 47 };
Christopher Haster 74:ef2470ca328b 48
Christopher Haster 74:ef2470ca328b 49
Christopher Haster 72:6a8b52ee83ed 50 /** Abstract socket class
Christopher Haster 74:ef2470ca328b 51 */
Christopher Haster 72:6a8b52ee83ed 52 class Socket {
Christopher Haster 72:6a8b52ee83ed 53 public:
Christopher Haster 72:6a8b52ee83ed 54 /** Socket lifetime
Christopher Haster 72:6a8b52ee83ed 55 */
Christopher Haster 72:6a8b52ee83ed 56 Socket();
Christopher Haster 72:6a8b52ee83ed 57 ~Socket();
Christopher Haster 72:6a8b52ee83ed 58
Christopher Haster 72:6a8b52ee83ed 59 /** Set blocking or non-blocking mode of the socket
Christopher Haster 72:6a8b52ee83ed 60 \param blocking true for blocking mode, false for non-blocking mode.
Christopher Haster 72:6a8b52ee83ed 61 */
Christopher Haster 72:6a8b52ee83ed 62 void set_blocking(bool blocking);
Christopher Haster 72:6a8b52ee83ed 63
Christopher Haster 74:ef2470ca328b 64 /** Set timeout on a socket operation if blocking behaviour is enabled
Christopher Haster 72:6a8b52ee83ed 65 \param timeout timeout in ms
Christopher Haster 72:6a8b52ee83ed 66 */
Christopher Haster 72:6a8b52ee83ed 67 void set_timeout(unsigned int timeout);
Christopher Haster 72:6a8b52ee83ed 68
Christopher Haster 72:6a8b52ee83ed 69 /** Set socket options
Christopher Haster 72:6a8b52ee83ed 70 \param optname option ID
Christopher Haster 72:6a8b52ee83ed 71 \param optval option value
Christopher Haster 72:6a8b52ee83ed 72 \param optlen length of the option value
Christopher Haster 72:6a8b52ee83ed 73 \return 0 on success, negative on failure
Christopher Haster 72:6a8b52ee83ed 74 */
Christopher Haster 74:ef2470ca328b 75 int set_option(int optname, const void *optval, unsigned int optlen);
Christopher Haster 72:6a8b52ee83ed 76
Christopher Haster 72:6a8b52ee83ed 77 /** Get socket options
Christopher Haster 72:6a8b52ee83ed 78 \param optname option ID
Christopher Haster 72:6a8b52ee83ed 79 \param optval buffer pointer where to write the option value
Christopher Haster 72:6a8b52ee83ed 80 \param socklen_t length of the option value
Christopher Haster 72:6a8b52ee83ed 81 \return 0 on success, negative on failure
Christopher Haster 72:6a8b52ee83ed 82 */
Christopher Haster 74:ef2470ca328b 83 int get_option(int optname, void *optval, unsigned int *optlen);
Christopher Haster 72:6a8b52ee83ed 84
Christopher Haster 72:6a8b52ee83ed 85 /** Close the socket
Christopher Haster 72:6a8b52ee83ed 86 \param shutdown free the left-over data in message queues
Christopher Haster 72:6a8b52ee83ed 87 */
Christopher Haster 72:6a8b52ee83ed 88 int close(bool shutdown=true);
Christopher Haster 72:6a8b52ee83ed 89 };
Christopher Haster 72:6a8b52ee83ed 90
Christopher Haster 72:6a8b52ee83ed 91 #endif