Marco Mayer / Mbed OS Queue
Committer:
demayer
Date:
Wed Apr 22 11:50:00 2020 +0000
Revision:
2:c7897a3f5f11
Parent:
0:6bf0743ece18
test

Who changed what in which revision?

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