mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

UserRevisionLine numberNew contents of line
be_bryan 0:b74591d5ab33 1
be_bryan 0:b74591d5ab33 2 /* TCPServer
be_bryan 0:b74591d5ab33 3 * Copyright (c) 2015 ARM Limited
be_bryan 0:b74591d5ab33 4 *
be_bryan 0:b74591d5ab33 5 * Licensed under the Apache License, Version 2.0 (the "License");
be_bryan 0:b74591d5ab33 6 * you may not use this file except in compliance with the License.
be_bryan 0:b74591d5ab33 7 * You may obtain a copy of the License at
be_bryan 0:b74591d5ab33 8 *
be_bryan 0:b74591d5ab33 9 * http://www.apache.org/licenses/LICENSE-2.0
be_bryan 0:b74591d5ab33 10 *
be_bryan 0:b74591d5ab33 11 * Unless required by applicable law or agreed to in writing, software
be_bryan 0:b74591d5ab33 12 * distributed under the License is distributed on an "AS IS" BASIS,
be_bryan 0:b74591d5ab33 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
be_bryan 0:b74591d5ab33 14 * See the License for the specific language governing permissions and
be_bryan 0:b74591d5ab33 15 * limitations under the License.
be_bryan 0:b74591d5ab33 16 */
be_bryan 0:b74591d5ab33 17
be_bryan 0:b74591d5ab33 18 #ifndef TCPSERVER_H
be_bryan 0:b74591d5ab33 19 #define TCPSERVER_H
be_bryan 0:b74591d5ab33 20
be_bryan 0:b74591d5ab33 21 #include "netsocket/Socket.h"
be_bryan 0:b74591d5ab33 22 #include "netsocket/TCPSocket.h"
be_bryan 0:b74591d5ab33 23 #include "netsocket/NetworkStack.h"
be_bryan 0:b74591d5ab33 24 #include "netsocket/NetworkInterface.h"
be_bryan 0:b74591d5ab33 25 #include "rtos/Semaphore.h"
be_bryan 0:b74591d5ab33 26
be_bryan 0:b74591d5ab33 27
be_bryan 0:b74591d5ab33 28 /** TCP socket server
be_bryan 0:b74591d5ab33 29 * @addtogroup netsocket
be_bryan 0:b74591d5ab33 30 */
be_bryan 0:b74591d5ab33 31 class TCPServer : public Socket {
be_bryan 0:b74591d5ab33 32 public:
be_bryan 0:b74591d5ab33 33 /** Create an uninitialized socket
be_bryan 0:b74591d5ab33 34 *
be_bryan 0:b74591d5ab33 35 * Must call open to initialize the socket on a network stack.
be_bryan 0:b74591d5ab33 36 */
be_bryan 0:b74591d5ab33 37 TCPServer();
be_bryan 0:b74591d5ab33 38
be_bryan 0:b74591d5ab33 39 /** Create a socket on a network interface
be_bryan 0:b74591d5ab33 40 *
be_bryan 0:b74591d5ab33 41 * Creates and opens a socket on the network stack of the given
be_bryan 0:b74591d5ab33 42 * network interface.
be_bryan 0:b74591d5ab33 43 *
be_bryan 0:b74591d5ab33 44 * @param stack Network stack as target for socket
be_bryan 0:b74591d5ab33 45 */
be_bryan 0:b74591d5ab33 46 template <typename S>
be_bryan 0:b74591d5ab33 47 TCPServer(S *stack)
be_bryan 0:b74591d5ab33 48 : _pending(0), _accept_sem(0)
be_bryan 0:b74591d5ab33 49 {
be_bryan 0:b74591d5ab33 50 open(stack);
be_bryan 0:b74591d5ab33 51 }
be_bryan 0:b74591d5ab33 52
be_bryan 0:b74591d5ab33 53 /** Destroy a socket
be_bryan 0:b74591d5ab33 54 *
be_bryan 0:b74591d5ab33 55 * Closes socket if the socket is still open
be_bryan 0:b74591d5ab33 56 */
be_bryan 0:b74591d5ab33 57 virtual ~TCPServer();
be_bryan 0:b74591d5ab33 58
be_bryan 0:b74591d5ab33 59 /** Listen for connections on a TCP socket
be_bryan 0:b74591d5ab33 60 *
be_bryan 0:b74591d5ab33 61 * Marks the socket as a passive socket that can be used to accept
be_bryan 0:b74591d5ab33 62 * incoming connections.
be_bryan 0:b74591d5ab33 63 *
be_bryan 0:b74591d5ab33 64 * @param backlog Number of pending connections that can be queued
be_bryan 0:b74591d5ab33 65 * simultaneously, defaults to 1
be_bryan 0:b74591d5ab33 66 * @return 0 on success, negative error code on failure
be_bryan 0:b74591d5ab33 67 */
be_bryan 0:b74591d5ab33 68 nsapi_error_t listen(int backlog = 1);
be_bryan 0:b74591d5ab33 69
be_bryan 0:b74591d5ab33 70 /** Accepts a connection on a TCP socket
be_bryan 0:b74591d5ab33 71 *
be_bryan 0:b74591d5ab33 72 * The server socket must be bound and set to listen for connections.
be_bryan 0:b74591d5ab33 73 * On a new connection, creates a network socket using the specified
be_bryan 0:b74591d5ab33 74 * socket instance.
be_bryan 0:b74591d5ab33 75 *
be_bryan 0:b74591d5ab33 76 * By default, accept blocks until data is sent. If socket is set to
be_bryan 0:b74591d5ab33 77 * non-blocking or times out, NSAPI_ERROR_WOULD_BLOCK is returned
be_bryan 0:b74591d5ab33 78 * immediately.
be_bryan 0:b74591d5ab33 79 *
be_bryan 0:b74591d5ab33 80 * @param connection TCPSocket instance that will handle the incoming connection.
be_bryan 0:b74591d5ab33 81 * @param address Destination for the remote address or NULL
be_bryan 0:b74591d5ab33 82 * @return 0 on success, negative error code on failure
be_bryan 0:b74591d5ab33 83 */
be_bryan 0:b74591d5ab33 84 nsapi_error_t accept(TCPSocket *connection, SocketAddress *address = NULL);
be_bryan 0:b74591d5ab33 85
be_bryan 0:b74591d5ab33 86 protected:
be_bryan 0:b74591d5ab33 87 virtual nsapi_protocol_t get_proto();
be_bryan 0:b74591d5ab33 88 virtual void event();
be_bryan 0:b74591d5ab33 89
be_bryan 0:b74591d5ab33 90 volatile unsigned _pending;
be_bryan 0:b74591d5ab33 91 rtos::Semaphore _accept_sem;
be_bryan 0:b74591d5ab33 92 };
be_bryan 0:b74591d5ab33 93
be_bryan 0:b74591d5ab33 94
be_bryan 0:b74591d5ab33 95 #endif