takashi kadono / Mbed OS Nucleo446_SSD1331

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Wed Oct 10 00:33:53 2018 +0000
Revision:
0:8fdf9a60065b
how to make mbed librry

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadonotakashi 0:8fdf9a60065b 1
kadonotakashi 0:8fdf9a60065b 2 /** \addtogroup netsocket */
kadonotakashi 0:8fdf9a60065b 3 /** @{*/
kadonotakashi 0:8fdf9a60065b 4 /* TCPSocket
kadonotakashi 0:8fdf9a60065b 5 * Copyright (c) 2015 ARM Limited
kadonotakashi 0:8fdf9a60065b 6 *
kadonotakashi 0:8fdf9a60065b 7 * Licensed under the Apache License, Version 2.0 (the "License");
kadonotakashi 0:8fdf9a60065b 8 * you may not use this file except in compliance with the License.
kadonotakashi 0:8fdf9a60065b 9 * You may obtain a copy of the License at
kadonotakashi 0:8fdf9a60065b 10 *
kadonotakashi 0:8fdf9a60065b 11 * http://www.apache.org/licenses/LICENSE-2.0
kadonotakashi 0:8fdf9a60065b 12 *
kadonotakashi 0:8fdf9a60065b 13 * Unless required by applicable law or agreed to in writing, software
kadonotakashi 0:8fdf9a60065b 14 * distributed under the License is distributed on an "AS IS" BASIS,
kadonotakashi 0:8fdf9a60065b 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kadonotakashi 0:8fdf9a60065b 16 * See the License for the specific language governing permissions and
kadonotakashi 0:8fdf9a60065b 17 * limitations under the License.
kadonotakashi 0:8fdf9a60065b 18 */
kadonotakashi 0:8fdf9a60065b 19
kadonotakashi 0:8fdf9a60065b 20 #ifndef TCPSOCKET_H
kadonotakashi 0:8fdf9a60065b 21 #define TCPSOCKET_H
kadonotakashi 0:8fdf9a60065b 22
kadonotakashi 0:8fdf9a60065b 23 #include "netsocket/InternetSocket.h"
kadonotakashi 0:8fdf9a60065b 24 #include "netsocket/NetworkStack.h"
kadonotakashi 0:8fdf9a60065b 25 #include "netsocket/NetworkInterface.h"
kadonotakashi 0:8fdf9a60065b 26 #include "rtos/EventFlags.h"
kadonotakashi 0:8fdf9a60065b 27
kadonotakashi 0:8fdf9a60065b 28
kadonotakashi 0:8fdf9a60065b 29 /** TCP socket connection
kadonotakashi 0:8fdf9a60065b 30 */
kadonotakashi 0:8fdf9a60065b 31 class TCPSocket : public InternetSocket {
kadonotakashi 0:8fdf9a60065b 32 public:
kadonotakashi 0:8fdf9a60065b 33 /** Create an uninitialized socket
kadonotakashi 0:8fdf9a60065b 34 *
kadonotakashi 0:8fdf9a60065b 35 * Must call open to initialize the socket on a network stack.
kadonotakashi 0:8fdf9a60065b 36 */
kadonotakashi 0:8fdf9a60065b 37 TCPSocket();
kadonotakashi 0:8fdf9a60065b 38
kadonotakashi 0:8fdf9a60065b 39 /** Create a socket on a network interface
kadonotakashi 0:8fdf9a60065b 40 *
kadonotakashi 0:8fdf9a60065b 41 * Creates and opens a socket on the network stack of the given
kadonotakashi 0:8fdf9a60065b 42 * network interface.
kadonotakashi 0:8fdf9a60065b 43 *
kadonotakashi 0:8fdf9a60065b 44 * @param stack Network stack as target for socket
kadonotakashi 0:8fdf9a60065b 45 */
kadonotakashi 0:8fdf9a60065b 46 template <typename S>
kadonotakashi 0:8fdf9a60065b 47 TCPSocket(S *stack)
kadonotakashi 0:8fdf9a60065b 48 {
kadonotakashi 0:8fdf9a60065b 49 open(stack);
kadonotakashi 0:8fdf9a60065b 50 }
kadonotakashi 0:8fdf9a60065b 51
kadonotakashi 0:8fdf9a60065b 52 /** Destroy a socket
kadonotakashi 0:8fdf9a60065b 53 *
kadonotakashi 0:8fdf9a60065b 54 * Closes socket if the socket is still open
kadonotakashi 0:8fdf9a60065b 55 */
kadonotakashi 0:8fdf9a60065b 56 virtual ~TCPSocket();
kadonotakashi 0:8fdf9a60065b 57
kadonotakashi 0:8fdf9a60065b 58 /** Override multicast functions to return error for TCP
kadonotakashi 0:8fdf9a60065b 59 *
kadonotakashi 0:8fdf9a60065b 60 */
kadonotakashi 0:8fdf9a60065b 61 virtual int join_multicast_group(const SocketAddress &address)
kadonotakashi 0:8fdf9a60065b 62 {
kadonotakashi 0:8fdf9a60065b 63 return NSAPI_ERROR_UNSUPPORTED;
kadonotakashi 0:8fdf9a60065b 64 }
kadonotakashi 0:8fdf9a60065b 65
kadonotakashi 0:8fdf9a60065b 66 /** Connects TCP socket to a remote host
kadonotakashi 0:8fdf9a60065b 67 *
kadonotakashi 0:8fdf9a60065b 68 * Initiates a connection to a remote server specified by either
kadonotakashi 0:8fdf9a60065b 69 * a domain name or an IP address and a port.
kadonotakashi 0:8fdf9a60065b 70 *
kadonotakashi 0:8fdf9a60065b 71 * @param host Hostname of the remote host
kadonotakashi 0:8fdf9a60065b 72 * @param port Port of the remote host
kadonotakashi 0:8fdf9a60065b 73 * @return 0 on success, negative error code on failure
kadonotakashi 0:8fdf9a60065b 74 */
kadonotakashi 0:8fdf9a60065b 75 nsapi_error_t connect(const char *host, uint16_t port);
kadonotakashi 0:8fdf9a60065b 76
kadonotakashi 0:8fdf9a60065b 77 /** Connects TCP socket to a remote host
kadonotakashi 0:8fdf9a60065b 78 *
kadonotakashi 0:8fdf9a60065b 79 * Initiates a connection to a remote server specified by the
kadonotakashi 0:8fdf9a60065b 80 * indicated address.
kadonotakashi 0:8fdf9a60065b 81 *
kadonotakashi 0:8fdf9a60065b 82 * @param address The SocketAddress of the remote host
kadonotakashi 0:8fdf9a60065b 83 * @return 0 on success, negative error code on failure
kadonotakashi 0:8fdf9a60065b 84 */
kadonotakashi 0:8fdf9a60065b 85 virtual nsapi_error_t connect(const SocketAddress &address);
kadonotakashi 0:8fdf9a60065b 86
kadonotakashi 0:8fdf9a60065b 87 /** Send data over a TCP socket
kadonotakashi 0:8fdf9a60065b 88 *
kadonotakashi 0:8fdf9a60065b 89 * The socket must be connected to a remote host. Returns the number of
kadonotakashi 0:8fdf9a60065b 90 * bytes sent from the buffer.
kadonotakashi 0:8fdf9a60065b 91 *
kadonotakashi 0:8fdf9a60065b 92 * By default, send blocks until all data is sent. If socket is set to
kadonotakashi 0:8fdf9a60065b 93 * non-blocking or times out, a partial amount can be written.
kadonotakashi 0:8fdf9a60065b 94 * NSAPI_ERROR_WOULD_BLOCK is returned if no data was written.
kadonotakashi 0:8fdf9a60065b 95 *
kadonotakashi 0:8fdf9a60065b 96 * @param data Buffer of data to send to the host
kadonotakashi 0:8fdf9a60065b 97 * @param size Size of the buffer in bytes
kadonotakashi 0:8fdf9a60065b 98 * @return Number of sent bytes on success, negative error
kadonotakashi 0:8fdf9a60065b 99 * code on failure
kadonotakashi 0:8fdf9a60065b 100 */
kadonotakashi 0:8fdf9a60065b 101 virtual nsapi_size_or_error_t send(const void *data, nsapi_size_t size);
kadonotakashi 0:8fdf9a60065b 102
kadonotakashi 0:8fdf9a60065b 103 /** Receive data over a TCP socket
kadonotakashi 0:8fdf9a60065b 104 *
kadonotakashi 0:8fdf9a60065b 105 * The socket must be connected to a remote host. Returns the number of
kadonotakashi 0:8fdf9a60065b 106 * bytes received into the buffer.
kadonotakashi 0:8fdf9a60065b 107 *
kadonotakashi 0:8fdf9a60065b 108 * By default, recv blocks until some data is received. If socket is set to
kadonotakashi 0:8fdf9a60065b 109 * non-blocking or times out, NSAPI_ERROR_WOULD_BLOCK can be returned to
kadonotakashi 0:8fdf9a60065b 110 * indicate no data.
kadonotakashi 0:8fdf9a60065b 111 *
kadonotakashi 0:8fdf9a60065b 112 * @param data Destination buffer for data received from the host
kadonotakashi 0:8fdf9a60065b 113 * @param size Size of the buffer in bytes
kadonotakashi 0:8fdf9a60065b 114 * @return Number of received bytes on success, negative error
kadonotakashi 0:8fdf9a60065b 115 * code on failure. If no data is available to be received
kadonotakashi 0:8fdf9a60065b 116 * and the peer has performed an orderly shutdown,
kadonotakashi 0:8fdf9a60065b 117 * recv() returns 0.
kadonotakashi 0:8fdf9a60065b 118 */
kadonotakashi 0:8fdf9a60065b 119 virtual nsapi_size_or_error_t recv(void *data, nsapi_size_t size);
kadonotakashi 0:8fdf9a60065b 120
kadonotakashi 0:8fdf9a60065b 121 /** Send data on a socket.
kadonotakashi 0:8fdf9a60065b 122 *
kadonotakashi 0:8fdf9a60065b 123 * TCP socket is connection oriented protocol, so address is ignored.
kadonotakashi 0:8fdf9a60065b 124 *
kadonotakashi 0:8fdf9a60065b 125 * By default, sendto blocks until data is sent. If socket is set to
kadonotakashi 0:8fdf9a60065b 126 * non-blocking or times out, NSAPI_ERROR_WOULD_BLOCK is returned
kadonotakashi 0:8fdf9a60065b 127 * immediately.
kadonotakashi 0:8fdf9a60065b 128 *
kadonotakashi 0:8fdf9a60065b 129 * @param address Remote address
kadonotakashi 0:8fdf9a60065b 130 * @param data Buffer of data to send to the host
kadonotakashi 0:8fdf9a60065b 131 * @param size Size of the buffer in bytes
kadonotakashi 0:8fdf9a60065b 132 * @return Number of sent bytes on success, negative error
kadonotakashi 0:8fdf9a60065b 133 * code on failure
kadonotakashi 0:8fdf9a60065b 134 */
kadonotakashi 0:8fdf9a60065b 135 virtual nsapi_size_or_error_t sendto(const SocketAddress &address,
kadonotakashi 0:8fdf9a60065b 136 const void *data, nsapi_size_t size);
kadonotakashi 0:8fdf9a60065b 137
kadonotakashi 0:8fdf9a60065b 138 /** Receive a data from a socket
kadonotakashi 0:8fdf9a60065b 139 *
kadonotakashi 0:8fdf9a60065b 140 * Receives a data and stores the source address in address if address
kadonotakashi 0:8fdf9a60065b 141 * is not NULL. Returns the number of bytes written into the buffer.
kadonotakashi 0:8fdf9a60065b 142 *
kadonotakashi 0:8fdf9a60065b 143 * By default, recvfrom blocks until a data is received. If socket is set to
kadonotakashi 0:8fdf9a60065b 144 * non-blocking or times out with no datagram, NSAPI_ERROR_WOULD_BLOCK
kadonotakashi 0:8fdf9a60065b 145 * is returned.
kadonotakashi 0:8fdf9a60065b 146 *
kadonotakashi 0:8fdf9a60065b 147 * @param address Destination for the source address or NULL
kadonotakashi 0:8fdf9a60065b 148 * @param data Destination buffer for datagram received from the host
kadonotakashi 0:8fdf9a60065b 149 * @param size Size of the buffer in bytes
kadonotakashi 0:8fdf9a60065b 150 * @return Number of received bytes on success, negative error
kadonotakashi 0:8fdf9a60065b 151 * code on failure
kadonotakashi 0:8fdf9a60065b 152 */
kadonotakashi 0:8fdf9a60065b 153 virtual nsapi_size_or_error_t recvfrom(SocketAddress *address,
kadonotakashi 0:8fdf9a60065b 154 void *data, nsapi_size_t size);
kadonotakashi 0:8fdf9a60065b 155
kadonotakashi 0:8fdf9a60065b 156 /** Accepts a connection on a socket.
kadonotakashi 0:8fdf9a60065b 157 *
kadonotakashi 0:8fdf9a60065b 158 * The server socket must be bound and set to listen for connections.
kadonotakashi 0:8fdf9a60065b 159 * On a new connection, returns connected network socket which user is expected to call close()
kadonotakashi 0:8fdf9a60065b 160 * and that deallocates the resources. Referencing a returned pointer after a close()
kadonotakashi 0:8fdf9a60065b 161 * call is not allowed and leads to undefined behaviour.
kadonotakashi 0:8fdf9a60065b 162 *
kadonotakashi 0:8fdf9a60065b 163 * By default, accept blocks until incomming connection occurs. If socket is set to
kadonotakashi 0:8fdf9a60065b 164 * non-blocking or times out, error is set to NSAPI_ERROR_WOULD_BLOCK.
kadonotakashi 0:8fdf9a60065b 165 *
kadonotakashi 0:8fdf9a60065b 166 * @param error pointer to storage of the error value or NULL
kadonotakashi 0:8fdf9a60065b 167 * @return pointer to a socket
kadonotakashi 0:8fdf9a60065b 168 */
kadonotakashi 0:8fdf9a60065b 169 virtual TCPSocket *accept(nsapi_error_t *error = NULL);
kadonotakashi 0:8fdf9a60065b 170
kadonotakashi 0:8fdf9a60065b 171 /** Listen for incoming connections.
kadonotakashi 0:8fdf9a60065b 172 *
kadonotakashi 0:8fdf9a60065b 173 * Marks the socket as a passive socket that can be used to accept
kadonotakashi 0:8fdf9a60065b 174 * incoming connections.
kadonotakashi 0:8fdf9a60065b 175 *
kadonotakashi 0:8fdf9a60065b 176 * @param backlog Number of pending connections that can be queued
kadonotakashi 0:8fdf9a60065b 177 * simultaneously, defaults to 1
kadonotakashi 0:8fdf9a60065b 178 * @return 0 on success, negative error code on failure
kadonotakashi 0:8fdf9a60065b 179 */
kadonotakashi 0:8fdf9a60065b 180 virtual nsapi_error_t listen(int backlog = 1);
kadonotakashi 0:8fdf9a60065b 181
kadonotakashi 0:8fdf9a60065b 182 protected:
kadonotakashi 0:8fdf9a60065b 183 friend class TCPServer;
kadonotakashi 0:8fdf9a60065b 184 virtual nsapi_protocol_t get_proto();
kadonotakashi 0:8fdf9a60065b 185 };
kadonotakashi 0:8fdf9a60065b 186
kadonotakashi 0:8fdf9a60065b 187
kadonotakashi 0:8fdf9a60065b 188 #endif
kadonotakashi 0:8fdf9a60065b 189
kadonotakashi 0:8fdf9a60065b 190 /** @}*/