Class CClientTCPSocket

Inheritance Relationships

Base Type

  • public mrpt::io::CStream

Class Documentation

class CClientTCPSocket : public mrpt::io::CStream

A TCP socket that can be connected to a TCP server, implementing MRPT’s CStream interface for passing objects as well as generic read/write methods. Unless otherwise noticed, operations are blocking.

Note that for convenience, DNS lookup is performed with a timeout (default=3000ms), which can be changed by the static member CClientTCPSocket::DNS_LOOKUP_TIMEOUT_MS

Public Functions

CClientTCPSocket()

Default constructor

See also

connect

~CClientTCPSocket() override

Destructor

void connect(const std::string &remotePartAddress, unsigned short remotePartTCPPort, unsigned int timeout_ms = 0)

Establishes a connection with a remote part.

Parameters:
  • remotePartAddress – This string can be a host name, like “server” or “www.mydomain.org”, or an IP address “11.22.33.44”.

  • remotePartTCPPort – The port on the remote machine to connect to.

  • timeout_ms – The timeout to wait for the connection (0: NO TIMEOUT)

Throws:

This – method raises an exception if an error is found with a textual description of the error.

bool isConnected() const

Returns true if this objects represents a successfully connected socket

void close()

Closes the connection

void sendString(const std::string &str)

Writes a string to the socket.

Throws:

std::exception – On communication errors

uint64_t Seek(int64_t off, CStream::TSeekOrigin org = sFromBeginning) override

This virtual method has no effect in this implementation over a TCP socket, and its use raises an exception

virtual uint64_t getTotalBytesCount() const override

This virtual method has no effect in this implementation over a TCP socket, and its use raises an exception

virtual uint64_t getPosition() const override

This virtual method has no effect in this implementation over a TCP socket, and its use raises an exception

size_t readAsync(void *Buffer, size_t Count, int timeoutStart_ms = -1, int timeoutBetween_ms = -1)

A method for reading from the socket with an optional timeout.

Parameters:
  • Buffer – The destination of data.

  • Cound – The number of bytes to read.

  • timeoutStart_ms – The maximum timeout (in milliseconds) to wait for the starting of data from the other side.

  • timeoutBetween_ms – The maximum timeout (in milliseconds) to wait for a chunk of data after a previous one. Set timeout’s to -1 to block until the desired number of bytes are read, or an error happens.

Returns:

The number of actually read bytes.

size_t writeAsync(const void *Buffer, size_t Count, int timeout_ms = -1)

A method for writing to the socket with optional timeouts. The method supports writing block by block as the socket allows us to write more data.

Parameters:
  • Buffer – The data.

  • Cound – The number of bytes to write.

  • timeout_ms – The maximum timeout (in milliseconds) to wait for the socket to be available for writing (for each block). Set timeout’s to -1 to block until the desired number of bytes are written, or an error happens.

Returns:

The number of actually written bytes.

template<class MESSAGE>
inline bool sendMessage(const MESSAGE &outMsg, const int timeout_ms = -1)

Send a message through the TCP stream.

Parameters:
  • outMsg – The message to be shown.

  • timeout_ms – The maximum timeout (in milliseconds) to wait for the socket in each write operation.

Template Parameters:

MESSAGE – can be mrpt::serialization::CMessage

Returns:

Returns false on any error, or true if everything goes fine.

template<class MESSAGE>
inline bool receiveMessage(MESSAGE &inMsg, const unsigned int timeoutStart_ms = 100, const unsigned int timeoutBetween_ms = 1000)

Waits for an incoming message through the TCP stream.

Parameters:
  • inMsg – The received message is placed here.

  • timeoutStart_ms – The maximum timeout (in milliseconds) to wait for the starting of data from the other side.

  • timeoutBetween_ms – The maximum timeout (in milliseconds) to wait for a chunk of data after a previous one.

Template Parameters:

MESSAGE – can be mrpt::serialization::CMessage

Returns:

Returns false on any error (or timeout), or true if everything goes fine.

size_t getReadPendingBytes()

Return the number of bytes already in the receive queue (they can be read without waiting)

int setTCPNoDelay(int newValue)

Set the TCP no delay option of the protocol (Nagle algorithm).

Parameters:

newValue – New value (0 enable Nagle algorithm, 1 disable).

Returns:

Return a number lower than 0 if any error occurred.

int getTCPNoDelay()

Return the value of the TCPNoDelay option.

int setSOSendBufffer(int newValue)

Set the size of the SO send buffer. This buffer is used to store data, and is sended when is full.

Parameters:

newValue – New size of the SO send buffer.

Returns:

Return a number lower than 0 if any error occurred.

int getSOSendBufffer()

Return the current size of the SO send buffer.

Public Static Attributes

static unsigned int DNS_LOOKUP_TIMEOUT_MS

See description of CClientTCPSocket

Protected Functions

virtual size_t Read(void *Buffer, size_t Count) override

Introduces a virtual method responsible for reading from the stream (This method BLOCKS) This method is implemented as a call to “readAsync” with infinite timeouts.

See also

readAsync

virtual size_t Write(const void *Buffer, size_t Count) override

Introduces a virtual method responsible for writing to the stream. Write attempts to write up to Count bytes to Buffer, and returns the number of bytes actually written. This method is implemented as a call to “writeAsync” with infinite timeouts.

See also

writeAsync

std::string getLastErrorStr()

Returns a description of the last Sockets error

Protected Attributes

int m_hSock = -1

The handle for the connected TCP socket, or -1

std::string m_remotePartIP

The IP address of the remote part of the connection.

unsigned short m_remotePartPort = 0

The TCP port of the remote part of the connection.