Skip to content

TcpServerTransport

class nmeasim::io::TcpServerTransport · Library API

Listens for TCP clients and sends every line to all of them.

#include <nmeasim/io/transports/tcp_server_transport.hpp>

Inherits nmeasim::io::Transport

Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp (line 30)

Any number of clients may connect; each receives every line written after it connected. A client that disconnects or reports a socket error is removed at once, and data received from clients is discarded, since the simulator only talks. client_count_changed is emitted whenever a client is added or removed. Errors while accepting a connection are reported through error_occurred and leave the server open.

Summary

Public member functions

Name Description
TcpServerTransport() Creates a closed server; it starts listening in open.
~TcpServerTransport() Destroys the transport, closing it and every client connection first.
description() Returns the bind address and the port.
open() Starts listening on the bind address and port.
close() Closes every client connection, stops listening and moves to State::Closed.
write() Queues line on the socket of every connected client.
client_count() Returns the number of connected clients.
port() Returns the TCP port of the server.

Private member functions

Name Description
accept_connections() Takes every pending connection from the server, starts tracking it and emits client_count_changed.
drop_client() Stops tracking client, schedules its deletion and emits client_count_changed.

Private data members

Name Description
server_ The listening socket; the Qt parent of every accepted client socket.
clients_ Connected clients, in order of connection.
requested_port_ Port passed to the constructor; 0 for a port chosen by the operating system.
bind_address_ Local address to listen on.

Public member functions

TcpServerTransport()

explicit TcpServerTransport(
    quint16 port,
    QHostAddress bind_address = QHostAddress::Any,
    QObject* parent = nullptr)

Creates a closed server; it starts listening in open.

Parameters

Name Type Description
port quint16 TCP port to listen on; 0 asks the operating system for a free port, which port returns once the server is open.
bind_address QHostAddress Local address to listen on. The default QHostAddress::Any accepts connections on every interface, IPv4 and IPv6; QHostAddress::LocalHost accepts local connections only.
parent QObject* Qt parent that owns the transport; null leaves ownership to the caller.

Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:42 · defined in src/io/src/transports/tcp_server_transport.cpp:12

~TcpServerTransport()

~TcpServerTransport() override

Destroys the transport, closing it and every client connection first.

Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:45 · defined in src/io/src/transports/tcp_server_transport.cpp:19

description()

QString description() const override

Returns the bind address and the port.

Returns QString: For example TCP server on 127.0.0.1:10110, with the port actually listened on while open.

Overrides description · Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:51 · defined in src/io/src/transports/tcp_server_transport.cpp:23

open()

bool open() override

Starts listening on the bind address and port.

Returns true at once when already open. Fails with Cannot listen on <address>:<port> and the reason, for example when the port is already in use or needs privileges.

Returns bool: True when the server listens, false when listening failed.

Overrides open · Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:58 · defined in src/io/src/transports/tcp_server_transport.cpp:27

close()

void close() override

Closes every client connection, stops listening and moves to State::Closed.

Emits client_count_changed with 0, even when no client was connected.

Overrides close · Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:62 · defined in src/io/src/transports/tcp_server_transport.cpp:43

write()

void write(const QByteArray& line) override

Queues line on the socket of every connected client.

Does nothing when no client is connected. Each socket sends asynchronously; the transport sets no limit on how much a slow client can have queued.

Parameters

Name Type Description
line const QByteArray& One complete line, terminator included.

Overrides write · Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:69 · defined in src/io/src/transports/tcp_server_transport.cpp:58

client_count()

int client_count() const override

Returns the number of connected clients.

Returns int: The clients accepted and not yet removed; 0 while closed.

Overrides client_count · Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:73 · defined in src/io/src/transports/tcp_server_transport.cpp:69

port()

quint16 port() const

Returns the TCP port of the server.

Returns quint16: The port actually listened on while open, which is the one chosen by the operating system when 0 was requested; otherwise the requested port.

Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:79 · defined in src/io/src/transports/tcp_server_transport.cpp:73

Private member functions

accept_connections()

void accept_connections()

Takes every pending connection from the server, starts tracking it and emits client_count_changed.

Connected to QTcpServer::newConnection.

Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:84 · defined in src/io/src/transports/tcp_server_transport.cpp:77

drop_client()

void drop_client(QTcpSocket* client)

Stops tracking client, schedules its deletion and emits client_count_changed.

Connected to the disconnected and errorOccurred signals of every client; a client that is no longer tracked is ignored, so a client reporting both is removed once.

Parameters

Name Type Description
client QTcpSocket* The client socket to remove; owned by server_.

Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:91 · defined in src/io/src/transports/tcp_server_transport.cpp:89

Private data members

server_

QTcpServer server_

The listening socket; the Qt parent of every accepted client socket.

Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:94

clients_

QList<QTcpSocket *> clients_

Connected clients, in order of connection.

The sockets are owned by server_ and deleted with deleteLater when removed.

Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:97

requested_port_

quint16 requested_port_

Port passed to the constructor; 0 for a port chosen by the operating system.

Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:99

bind_address_

QHostAddress bind_address_

Local address to listen on.

Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:101

Inherited members

From nmeasim::io::TcpServerTransport: bytes_written(), client_count_changed(), count_bytes(), error_occurred(), fail(), is_open(), last_error(), set_state(), State, state(), state_changed(), Transport()