PL::TcpServer class
-
class TcpServer : public PL::NetworkServer
TCP server class.
Note
Listens on a single IPv6 socket and relies on lwIP dual-stack support (IPV6_V6ONLY disabled, the ESP-IDF default) to accept IPv4 clients as well, via IPv4-mapped IPv6 addresses. If dual-stack support is disabled, only IPv6 clients will be able to connect.
Public Functions
-
TcpServer(uint16_t port)
Creates a TCP server.
- Parameters:
port – port
-
~TcpServer()
Note
Every derived class must call StopTask as the first statement of its own destructor so that TaskCode does not call HandleRequest on a partially destroyed object; the base destructor aborts if this was not done.
-
virtual esp_err_t Lock(TickType_t timeout = portMAX_DELAY) override
Locks the object.
- Parameters:
timeout – timeout in FreeRTOS ticks
- Returns:
error code
-
virtual esp_err_t Unlock() override
Unlocks the object.
- Returns:
error code
-
virtual esp_err_t Enable() override
Enables the server.
- Returns:
error code
-
virtual esp_err_t Disable() override
Disables the server.
- Returns:
error code
-
esp_err_t EnableNagleAlgorithm()
Enables the Nagle’s algorithm.
- Returns:
error code
-
esp_err_t DisableNagleAlgorithm()
Disables the Nagle’s algorithm.
- Returns:
error code
-
esp_err_t EnableKeepAlive()
Enables the keep-alive packets.
- Returns:
error code
-
esp_err_t DisableKeepAlive()
Disables the keep-alive packets.
- Returns:
error code
-
virtual bool IsEnabled() override
Checks if the server is enabled.
- Returns:
true if the server is enabled
-
virtual uint16_t GetPort() override
Gets listening port.
- Returns:
port
-
virtual esp_err_t SetPort(uint16_t port) override
Sets listening port.
- Parameters:
port – port
- Returns:
error code
-
virtual size_t GetMaxNumberOfClients() override
Gets the maximum number of server clients.
- Returns:
number of clients
-
virtual esp_err_t SetMaxNumberOfClients(size_t maxNumberOfClients) override
Sets the maximum number of server clients.
- Parameters:
maxNumberOfClients – number of clients
- Returns:
error code
-
std::vector<std::shared_ptr<NetworkStream>> GetClientStreams()
Gets the connected client streams.
- Returns:
client streams
-
esp_err_t SetTaskParameters(const TaskParameters &taskParameters)
Sets the server task parameters.
- Parameters:
taskParameters – task parameters
- Returns:
error code
-
esp_err_t SetKeepAliveIdleTime(int seconds)
Sets the idle time before the keep-alive packets are sent.
- Parameters:
seconds – time in seconds
- Returns:
error code
-
esp_err_t SetKeepAliveInterval(int seconds)
Sets the keep-alive packet interval.
- Parameters:
seconds – interval in seconds
- Returns:
error code
-
esp_err_t SetKeepAliveCount(int count)
Sets the number of the keep-alive packets.
- Parameters:
count – number of packets
- Returns:
error code
-
std::string GetName()
Gets the server name.
- Returns:
name
-
void SetName(const std::string &name)
Sets the server name.
- Parameters:
name – name
Public Members
-
Event<TcpServer, NetworkStream&> clientConnectedEvent
Client connected event.
-
Event<TcpServer, NetworkStream&> clientDisconnectedEvent
Client disconnected event.
Public Static Attributes
-
static const TaskParameters defaultTaskParameters
Default server task parameters.
-
static constexpr size_t defaultMaxNumberOfClients = 1
Default maximum number of server clients.
-
static constexpr int defaultKeepAliveIdleTime = 7200
Default idle time before the keep-alive packets are sent in seconds.
-
static constexpr int defaultKeepAliveInterval = 75
Default keep-alive packet interval in seconds.
-
static constexpr int defaultKeepAliveCount = 9
Default number of the keep-alive packets.
Protected Functions
-
esp_err_t StopTask()
Stops the server task, closes the client streams and waits for the task to exit.
Note
Must be called as the first statement of the destructor of every derived class so that TaskCode does not call HandleRequest on a partially destroyed object. Aborts if called from the server task itself, since it cannot wait for its own task to exit.
- Returns:
error code
-
virtual esp_err_t HandleRequest(NetworkStream &clientStream) = 0
Handles the TCP client request.
Note
Called from a single internal task that also accepts new clients and services every other connected client in turn, and holds the server’s own lock while doing so. A slow or blocking implementation delays new connections, all other clients, and any other thread’s calls into this server’s public API until it returns.
- Parameters:
clientStream – client stream
- Returns:
error code
-
TcpServer(uint16_t port)