PPL7-Icon Patrick's Programming Library Version 7.0.0 - Dokumentation
ppl7::TCPSocket Klassenreferenz

TCP-Socket-Klasse. Mehr ...

Öffentliche Methoden

 TCPSocket ()
 Konstruktor der Klasse. Mehr ...
 
virtual ~TCPSocket ()
 Destruktor der Klasse. Mehr ...
 
TCP-Client functions
void setSource (const String &interface_name, int port=0)
 Quell-Interface und Port festlegen. Mehr ...
 
void connect (const String &host_and_port)
 Verbindung aufbauen. Mehr ...
 
void connect (const String &host, int port)
 Verbindung aufbauen. Mehr ...
 
void setTimeoutConnect (int seconds, int useconds)
 Timeout für Connect-Funktion definieren. Mehr ...
 
bool isConnected () const
 Prüfen, ob eine Verbindung besteht. Mehr ...
 
TCP-Server functions
void bind (const String &host, int port)
 Socket auf eine IP-Adresse und Port binden. Mehr ...
 
virtual int receiveConnect (TCPSocket *socket, const String &host, int port)
 Eingehende Verbindung verarbeiten. Mehr ...
 
bool isListening () const
 Prüfen, ob der Socket auf eingehende Verbindungen wartet. Mehr ...
 
void stopListen ()
 TCP-Server anhalten. Mehr ...
 
void signalStopListen ()
 TCP-Server signalisieren, dass er stoppen soll. Mehr ...
 
void listen (int backlog=64, int timeout=100)
 Server starten und auf eingehende Verbindung warten. Mehr ...
 
Common functions for client and server
void setTimeoutRead (int seconds, int useconds)
 Lese-Timeout festlegen. Mehr ...
 
void setTimeoutWrite (int seconds, int useconds)
 Schreib-Timeout festlegen. Mehr ...
 
void disconnect ()
 Verbindung trennen. Mehr ...
 
void shutdown ()
 Verbindung trennen. Mehr ...
 
size_t write (const String &str, size_t bytes=0)
 
size_t write (const WideString &str, size_t bytes=0)
 
size_t write (const ByteArrayPtr &bin, size_t bytes=0)
 
size_t write (const void *buffer, size_t bytes)
 Daten schreiben. Mehr ...
 
size_t writef (const char *fmt,...)
 
size_t write (const SocketMessage &msg)
 Nachricht verschicken. Mehr ...
 
size_t read (void *buffer, size_t bytes)
 Daten lesen. Mehr ...
 
size_t read (String &buffer, size_t bytes)
 
size_t read (ByteArray &buffer, size_t bytes)
 
int getDescriptor ()
 Descriptor des Sockets auslesen. Mehr ...
 
void setBlocking (bool value)
 Bei Lesezugriffen blockieren. Mehr ...
 
bool isWriteable ()
 Prüfen, ob Daten auf den Socket geschrieben werden können. Mehr ...
 
bool isReadable ()
 Prüfen, ob Daten vom Socket gelesen werden können. Mehr ...
 
bool waitForIncomingData (int seconds, int useconds)
 Auf eingehende Daten warten. Mehr ...
 
bool waitForOutgoingData (int seconds, int useconds)
 Warten, bis der Socket beschreibbar ist. Mehr ...
 
SockAddr getSockAddr () const
 
SockAddr getPeerAddr () const
 
SSL Encryption
void sslStart (SSLContext &context)
 SSL-Kommunikation starten. Mehr ...
 
void sslStop ()
 SSL-Kommunikation stoppen. Mehr ...
 
int sslCheckCertificate (const ppl7::String &name, bool AcceptSelfSignedCert=false)
 
void sslAccept (SSLContext &context)
 Auf eine TLS/SSL-Handshake warten. Mehr ...
 
int sslWaitForAccept (int timeout=0)
 
TODO
bool waitForMessage (SocketMessage &msg, int timeout_seconds=0, Thread *watch_thread=NULL)
 Auf Nachricht warten. Mehr ...
 

Private Methoden

SSL-Verschlüsselung

Die nachfolgenden Befehle werden benötigt, wenn die Kommunikation zwischen Client und Server mit SSL verschlüsselt werden soll. Voraussetzung dafür ist, dass die PPL-Library mit OpenSSL-Unterstützung kompiliert wurde.

int SSL_Write (const void *buffer, int size)
 Verschlüsselte Daten schreiben. Mehr ...
 
int SSL_Read (void *buffer, int bytes)
 Verschlüsselte Daten lesen. Mehr ...
 

Private Attribute

int connect_timeout_sec
 
int connect_timeout_usec
 
bool connected
 
String HostName
 
bool islisten
 
Mutex mutex
 
int PortNum
 
void * socket
 
String SourceInterface
 
int SourcePort
 
void * ssl
 
SSLContextsslcontext
 
bool stoplisten
 

Ausführliche Beschreibung

Socket-Klasse für TCP-Verbindungen.

Include:
#include <ppl7-inet.h>
Beschreibung:
Mit dieser Klasse kann eine TCP-Verbindung (Transmission Control Protocol) zu einem über IP erreichbaren Server aufgebaut oder ein eigener Server gestartet werden. Über eine bestehende Verbindung können Daten gesenden und empfangen werden. Mit Hilfe der Klasse CSSL und der OpenSSL-Bibliothek können die Daten auch verschlüsselt übertragen werden.
Beispiel: TCP-Client
Das nachfolgende Beispiel zeigt einen einfachen Client, der eine Verbindung zu einem Server öffnet, ein Datenpaket sendet und auf ein Datenpaket wartet.
Beispiel: TCP-Server
Das zweite Beispiel zeigt, wie ein einfacher TCP-Server programmiert wird. Zunächst wird ein Server gestartet, der auf eingehende Verbindungen wartet. Nach Verbindungseingang wird auf Datenpakete gewartet, die sofort wieder an den Client zurückgeschickt werden. Durch Abbruch der Verbindung wird die Schleife wieder beendet.
Ein weiteres Beispiel mit einer verschlüsselten Datenübertragung ist in der Dokumentation der Klasse CSSL zu finden.

Beschreibung der Konstruktoren und Destruktoren

ppl7::TCPSocket::TCPSocket ( )
ppl7::TCPSocket::~TCPSocket ( )
virtual

Dokumentation der Elementfunktionen

void ppl7::TCPSocket::bind ( const String host,
int  port 
)
Beschreibung:
Diese Funktion muss aufgerufen werden, bevor man mit CTCPSocket::Listen einen TCP-Server starten kann. Dabei wird mit host die IP-Adresse festgelegt, auf die sich der Server binden soll und mit port der TCP-Port. Es ist nicht möglich einen Socket auf mehrere Adressen zu binden.
Parameter
[in]hostIP-Adresse, Hostname oder "*". Bei Angabe von "*" bindet sich der Socket auf alle Interfaces des Servers.
[in]portDer gewünschte TCP-Port
Ausnahmebehandlung
OutOfMemoryException
ResolverException
SettingSocketOptionException
CouldNotBindToInterfaceException
CouldNotOpenSocketException
void ppl7::TCPSocket::connect ( const String host_and_port)
Beschreibung:
Mit dieser Funktion wird eine Verbindung zur angegebenen Adresse aufgebaut.
Parameter
hostDer Parameter host_and_port muss das Format "hostname:port" haben, wobei "hostname" auch eine IP-Adresse sein kann. Der Port kann entweder als Zahl oder als Servicename angegeben werden, z.B. "smtp" für Port 25.
Ausnahmebehandlung
IllegalArgumentExceptionWird geworfen, wenn der Parameter host_and_port keinen Wert oder keinen oder mehr als einen Doppelpunkt enthält
IllegalPortExceptionwird geworfen, wenn der angegebene Port oder Servicename ungültig ist.
void ppl7::TCPSocket::connect ( const String host,
int  port 
)
Beschreibung:
Mit dieser Funktion wird eine Verbindung zur angegebenen Adresse aufgebaut.
Parameter
[in]hostDer Hostname oder die IP-Adresse des Zielrechners
[in]portDer gewünschte Zielport
Ausnahmebehandlung
IllegalArgumentExceptionWird geworfen, wenn einer der beiden Parameter keinen oder einen ungültigen Wert enthält
IllegalPortExceptionwird geworfen, wenn der angegebene Port ungültig ist.
void ppl7::TCPSocket::disconnect ( )
Beschreibung:
Durch Aufruf dieser Funktion wird eine bestehende Verbindung beendet. Unter Windows ist die Funktion identisch mit CTCPSocket::shutdown, unter Unix unterscheiden sie sich.
TCPSocket::disconnect schließt den Socket-Descriptor für den Prozess, die Verbindung bleibt jedoch weiterhin bestehen, wenn ein anderer Prozess den gleichen Descriptor verwendet. Die Verbindung bleibt dann sowohl zum Lesen als auch zum Schreiben geöffnet.
TCPSocket::shutdown trennt die Verbindung für alle Prozesse, die den gleichen Descriptor verwenden. Falls ein anderer Prozess noch versucht auf den Socket zuzzugreifen, bekommt er eine Fehlermeldung. Beim Lesen ist dies meist ein EOF, beim Schreiben ein SIGPIPE, der möglicherweise Aufgrund von Puffern im Kernel nicht sofort auftreten muss.
Ausnahmebehandlung
int ppl7::TCPSocket::getDescriptor ( )
Beschreibung:
Mit dieser Funktion kann der Betriebssystem-spezifische Socket-Descriptor ausgelesen werden. Unter Unix ist dies ein File-Descriptor vom Typ Integer, unter Windows ein Socket-Descriptor vom Typ SOCKET.
Rückgabe
Betriebsystem-spezifischer Descriptor.
Ausnahmebehandlung
NotConnectedExceptionWird geworfen, wenn kein Socket geöffnet ist
SockAddr ppl7::TCPSocket::getPeerAddr ( ) const
SockAddr ppl7::TCPSocket::getSockAddr ( ) const
bool ppl7::TCPSocket::isConnected ( ) const
Beschreibung:
Mit dieser Funktion kann überprüft werden, ob eine TCP-Verbindung besteht.
Rückgabe
Liefert 1 zurück, wenn eine Verbindung besteht, sonst 0. Es wird kein Fehlercode gesetzt.
bool ppl7::TCPSocket::isListening ( ) const
Beschreibung:
Mit dieser Funktion kann überprüft werden, ob der Socket auf eingehende TCP-Verbindungen wartet.
Rückgabe
Liefert 1 zurück, wenn der Socket wartet, sonst 0. Es wird kein Fehlercode gesetzt.
bool ppl7::TCPSocket::isReadable ( )
Beschreibung:
Diese Funktion prüft, ob der bereits geöffnete Socket bereit ist, um Daten zu lesen.
Rückgabe
Liefert true zurück, wenn vom Socket gelesen werden kann. Ist dies nicht der Fall, liegt ein Fehler vor und es wird eine entsprechende Exception geworfen.
Ausnahmebehandlung
DiverseIm Fehlerfall wird eine Exception geworfen
bool ppl7::TCPSocket::isWriteable ( )
Beschreibung:
Diese Funktion prüft, ob der bereits verbundene Socket beschreibbar ist.
Rückgabe
Liefert true zurück, wenn Daten auf den Socket geschrieben werden können, ansonsten false.
Ausnahmebehandlung
DiverseIm Fehlerfall wird eine Exception geworfen
void ppl7::TCPSocket::listen ( int  backlog = 64,
int  timeout = 100 
)
Beschreibung:
Der Aufruf dieser Funktion führt dazu, dass auf eingehende TCP-Verbindungen gewartet wird. Es wird also ein TCP-Server gestartet. Wird eine Verbindung geöffnet, ruft sie die virtuelle Funktion CTCPSocket::ReceiveConnect auf. Diese muss entsprechend reagieren, indem Sie bei Annahme der Verbindung einen neuen Thread startet und 1 zurückgibt, bei Ablehnung 0.
Vor Aufruf der Funktion muss der Klasse über die Funktion CTCPSocket::Bind zuerst mitgeteilt werden, auf welche IP-Adresse und Port sich der Server binden soll. Sofern kein kritischer Fehler auftritt, läuft die Funktion in einer Endlosschleife. Alle timeout Millisekunden wird jedoch geprüft, ob die Funktion sich beenden soll. Dies wird durch Aufruf der Funktion CTCPSocket::SignalStopListen oder CTCPSocket::StopListen signalisiert.
Parameter
[in]backlogThe backlog argument defines the maximum length to which the queue of pending connections for sockfd may grow. If a connection request arrives when the queue is full, the client may receive an error with an indication of ECONNREFUSED or, if the underly‐ ing protocol supports retransmission, the request may be ignored so that a later reattempt at connection succeeds.
[in]timeoutIntervall in Millisekunden, nachdem geprüpft werden soll, ob weiter auf eingehende Verbindungen gewartet werden soll. Je niedriger der Wert, desto schneller wird auf einen Stop-Befehl reagiert, jedoch steigt dadurch auch die CPU-Auslastung. Der Default ist 100 Millisekunden (1000 Millisekunden = 1 Sekunde).
Rückgabe
Konnte der Server erfolgreich gestartet werden, kehrt die Funktion erst dann wieder zurück, wenn er wieder gestoppt wird. In diesem Fall liefert sie den Wert 1 zurück. Konnte der Server nicht gestartet werden, wird 0 zurückgegeben.
size_t ppl7::TCPSocket::read ( void *  buffer,
size_t  bytes 
)
Beschreibung:
Diese Funktion versucht bytes vom Socket in den von der Anwendung angegebenen Puffer buffer zu lesen. Falls der Socket auf "blocking" eingestellt ist (=Default) wartet die Funktion solange, bis die ersten Daten eingegangen sind und liefert diese zurück. Ist der Socket auf "non blocking" eingestellt, kehrt die Funktion sofort zurück, wenn keine Daten zur Verfügung stehen. Die Anzahl tatsächlich gelesener Bytes wird als Rückgabewert zurückgegeben.
Parameter
[in]bufferSpeicherbereich, in dem die gelesenen Daten abgelegt werden sollen. Dieses muss gross genug sein, um die erwartete Anzahl Bytes aufnehmen zu können.
[in]bytesAnzahl zu lesender Bytes
Rückgabe
Die Funktion gibt die Anzahl tatsächlich gelesener Bytes zurück. Im Fehlerfall wird eine Exception geworfen.
Siehe auch
TCPSocket::setBlocking Socket auf "blocking" oder "non blocking" stellen
TCPSocket::isReadable
TCPSocket::waitForIncomingData
size_t ppl7::TCPSocket::read ( String buffer,
size_t  bytes 
)
size_t ppl7::TCPSocket::read ( ByteArray buffer,
size_t  bytes 
)
int ppl7::TCPSocket::receiveConnect ( TCPSocket socket,
const String host,
int  port 
)
virtual
Beschreibung:
Diese virtuelle Funktion wird innerhalb von CTCPSocket::Listen aufgerufen, wenn eine neue Verbindung zum Server aufgebaut wurde. Sie muss daher von der abgeleiteten Klasse reimplementiert werden.
Parameter
[in]socketPointer auf eine neue Socket-Klasse, die die eingegangene Verbindung repräsentiert. Die Anwendung muss die Klasse nach Verbindungsende selbst mit "delete" löschen.
[in]hostHostname oder IP der Gegenstelle
[in]portTCP-Port der Gegenstelle
Rückgabe
Wird die Verbindung angenommen und von der Anwendung weiter verarbeitet (z.B. in einem eigenen Thread), muss die Funktion 1 zurückgeben. Soll die Verbindung wieder getrennt werden, muss die Funktion 0 zurückgeben.
void ppl7::TCPSocket::setBlocking ( bool  value)
Beschreibung:
Durch Aufruf dieser Funktion kann festgelegt werden, ob der Socket bei Lesezugriffen blockieren soll. Nach dem Öffnen des Sockets ist dieser defaultmäßig so eingestellt, dass er bei Lesezugriffen solange blockiert (wartet), bis Daten zur Verfügung stehen. Wird er auf "Non-Blocking" gestellt, kehren die Lese-Funktionen sofort mit einer Fehlermeldung zurück, wenn noch keine Daten bereitstehen.
Parameter
[in]valueDer Wert "true" setzt den Socket in den Blocking-Modus, was auch der Default ist. Durch den Wert "false" wird er in den Non-Blocking-Modus gesetzt.
Ausnahmebehandlung
Diverse
void ppl7::TCPSocket::setSource ( const String interface,
int  port = 0 
)
Beschreibung:
Diese Funktion kann aufgerufen werden, wenn der Rechner über mehrere Netzwerkinterfaces verfügt. Normalerweise entscheidet das Betriebssytem, welches Interface für eine ausgehende Verbindung verwendet werden soll, aber manchmal kann es sinnvoll sein, dies manuell zu machen.
Parameter
[in]interfaceHostname oder IP-Adresse des Quellinterfaces. Bleibt der Parameter leer, wird nur der port beachtet
[in]portPort-Nummer des Quellinterfaces. Wird 0 angegeben, wird nur das interface beachtet
Achtung
Diese Funktionalität wird derzeit nicht unter Windows unterstützt! Falls trotzdem ein host oder port definiert wurden, wird die Connect-Funktion fehlschlagen!
Bemerkungen
Sind beide Parameter leer bzw. 0, wird das Quellinterface und Port vom Betriebssystem festgelegt.
void ppl7::TCPSocket::setTimeoutConnect ( int  seconds,
int  useconds 
)
Beschreibung:
Mit dieser Funktion kann ein Timeout für die Connect-Funktionen definiert werden. Ist es nicht möglich innerhalb der vorgegebenen Zeit eine Verbindung mit dem Ziel herzustellen, brechen die Connect-Funktionen mit einer Timeout-Fehlermeldung ab.
Um den Timeout wieder abzustellen, kann die Funktion mit 0 als Wert für seconds und useconds aufgerufen werden.
Parameter
[in]secondsAnzahl Sekunden
[in]usecondsAnzahl Mikrosekunden (1000 Mikrosekunden=1 Millisekunde, 1000 Millisekunden = 1 Sekunde)
void ppl7::TCPSocket::setTimeoutRead ( int  seconds,
int  useconds 
)

Mit dieser Funktion kann ein Timeout für Lesezugriffe gesetzt werden. Normalerweise blockiert eine Leseoperation mit "Read" solange, bis die angeforderten Daten eingegangen sind (ausser der Socket wurde mit TCPSocket::setBlocking auf "Non-Blocking" gesetzt). Mit dieser Funktion kann jedoch ein beliebiger mikrosekunden genauer Timeout festgelegt werden. Der Timeout errechnet sich dabei aus seconds + useconds.

Um den Timeout wieder abzustellen, kann die Funktion mit 0 als Wert für seconds und useconds aufgerufen werden.
Parameter
[in]secondsAnzahl Sekunden
[in]usecondsAnzahl Mikrosekunden (1000000 Mikrosekunden = 1 Sekunde)
Ausnahmebehandlung
NotConnectedException
InvalidSocketException
BadFiledescriptorException
UnknownOptionException
BadAddressException
InvalidArgumentsException
void ppl7::TCPSocket::setTimeoutWrite ( int  seconds,
int  useconds 
)

Mit dieser Funktion kann ein Timeout für Schreibzugriffe gesetzt werden. Normalerweise blockiert eine Schreiboperation mit "Write" solange, bis alle Daten gesendet wurden. Mit dieser Funktion kann jedoch ein beliebiger mikrosekunden genauer Timeout festgelegt werden. Der Timeout errechnet sich dabei aus seconds + useconds.

Um den Timeout wieder abzustellen, kann die Funktion mit 0 als Wert für seconds und useconds aufgerufen werden.
Parameter
[in]secondsAnzahl Sekunden
[in]usecondsAnzahl Mikrosekunden (1000000 Mikrosekunden = 1 Sekunde)
Ausnahmebehandlung
NotConnectedException
InvalidSocketException
BadFiledescriptorException
UnknownOptionException
BadAddressException
InvalidArgumentsException
void ppl7::TCPSocket::shutdown ( )
Beschreibung:
Durch Aufruf dieser Funktion wird eine bestehende Verbindung beendet. Unter Windows ist die Funktion identisch mit CTCPSocket::shutdown, unter Unix unterscheiden sie sich.
TCPSocket::disconnect schließt den Socket-Descriptor für den Prozess, die Verbindung bleibt jedoch weiterhin bestehen, wenn ein anderer Prozess den gleichen Descriptor verwendet. Die Verbindung bleibt dann sowohl zum Lesen als auch zum Schreiben geöffnet.
TCPSocket::shutdown trennt die Verbindung für alle Prozesse, die den gleichen Descriptor verwenden. Falls ein anderer Prozess noch versucht auf den Socket zuzzugreifen, bekommt er eine Fehlermeldung. Beim Lesen ist dies meist ein EOF, beim Schreiben ein SIGPIPE, der möglicherweise Aufgrund von Puffern im Kernel nicht sofort auftreten muss.
void ppl7::TCPSocket::signalStopListen ( )
Beschreibung:
Durch Aufruf dieser Funktion innerhalb eines anderen Threads wird dem Server mitgeteilt, dass er nicht weiter auf Verbindungseingänge warten soll. Die Funktion kehrt dabei sofort zurück und es liegt an der Anwendung später zu prüfen, ob der Server wirklich gestoppt wurde (z.B. mit CTCPSocket::StopListen).
int ppl7::TCPSocket::SSL_Read ( void *  buffer,
int  size 
)
private
Beschreibung:
Diese private Funktion wird intern automatisch von den Read-Funktionen der Socketklasse aufgerufen, wenn SSL-Verschlüsselung aktiviert wurde. Anstelle der Read-Funktionen der Socket-Schnittstelle des Betriebssystems wird dann diese Funktion verwendet. Sie liest size verschlüsselte Bytes von der Gegenstelle in den bereits allokierten Speicherbereich buffer und entschlüsselt sie dabei.
Parameter
[in]bufferBereits allokierter Speicherbereich, in den die gelesenen Daten geschrieben werden sollen
[in]sizeAnzahl zu lesender Bytes.
Rückgabe
Die Funktion gibt die Anzahl erfolgreich gelesener Bytes zurück, was auch 0 sein kann
Ausnahmebehandlung
SSLExceptionwird geworfen, wenn ein Fehler aufgetreten ist
int ppl7::TCPSocket::SSL_Write ( const void *  buffer,
int  size 
)
private
Beschreibung:
Diese private Funktion wird intern automatisch von den Write-Funktionen der Socketklasse aufgerufen, wenn SSL-Verschlüsselung aktiviert wurde. Anstelle der Write-Funktionen der Socket-Schnittstelle des Betriebssystems wird dann diese Funktion verwendet. Sie schickt size Bytes aus dem Speicherbereich buffer verschlüsselt an die Gegenstelle.
Parameter
[in]bufferBeginn des zu sendenden Speicherbereichs
[in]sizeAnzahl zu sendender Bytes.
Rückgabe
Die Funktion gibt die Anzahl erfolgreich geschriebener Bytes zurück, was auch 0 sein kann.
Ausnahmebehandlung
SSLExceptionwird geworfen, wenn ein Fehler aufgetreten ist
void ppl7::TCPSocket::sslAccept ( SSLContext context)
Beschreibung:
SSL_Accept wartet darauf, dass der mit dem Socket verbundene Client eine TLS/SSL Verbindung startet. Ist der Socket auf "blocking" eingestellt, wartet die Funktion solange, bis ein Handshake erfolgt, die Verbindung getrennt wird oder ein Timeout auftritt. Die verwandte Funktion CTCPSocket::SSL_WaitForAccept wartet ebenfalls auf ein TLS/SSL Handshake, jedoch kann hier zusätzlich ein Timeout angegeben werden und die Funktion beendet sich, wenn der Thread beendet werden soll.
Rückgabe
Bei erfolgreichem Handshake liefert die Funktion 1 zurück, im Fehlerfall 0.
int ppl7::TCPSocket::sslCheckCertificate ( const ppl7::String name,
bool  AcceptSelfSignedCert = false 
)
void ppl7::TCPSocket::sslStart ( SSLContext context)
Beschreibung:
Durch Aufruf dieser Funktion wird die SSL-Kommunikation über eine bereits bestehende TCP-Verbindung zu einem Server gestartet. Um wieder unverschlüsselt kommunizieren zu können, muss CTCPSocket::sslStop aufgerufen werden.
Ausnahmebehandlung
DiverseFalls die SSL-Kommunikation nicht gestartet werden kann, wird eine Exception geworfen
void ppl7::TCPSocket::sslStop ( )
Beschreibung:
Durch Aufruf dieser Funktion wird die SSL-Kommunikation zu einem Server wieder gestoppt. Sofern die Verbindung dadurch nicht geschlossen wird, kann mit der Gegenstelle wieder unverschlüsselt kommuniziert werden.
Ausnahmebehandlung
KeineDurch Aufruf dieser Funktion wird keine Exception geworfen.
int ppl7::TCPSocket::sslWaitForAccept ( int  timeout = 0)
void ppl7::TCPSocket::stopListen ( )
Beschreibung:
Durch Aufruf dieser Funktion innerhalb eines anderen Threads wird dem Server mitgeteilt, dass er nicht weiter auf Verbindungseingänge warten soll. Die Funktion kehrt dabei erst zurück, wenn der Server sich beendet hat. Falls man darauf nicht warten möchte, kann stattdessen auch CTCPSocket::SignalStopListen aufgerufen werden.
bool ppl7::TCPSocket::waitForIncomingData ( int  seconds,
int  useconds 
)
Beschreibung:
Diese Funktion prüft, ob Daten eingegangen sind. Ist dies der Fall, kehrt sie sofort wieder zurück. Andernfalls wartet sie solange, bis Daten eingehen, maximal aber die mit seconds und useconds angegebene Zeitspanne. Falls seconds und useconds Null sind, und keine Daten bereitstehen, kehrt die Funktion sofort zurück.
Parameter
[in]secondsAnzahl Sekunden, die gewartet werden soll
[in]usecondsAnzahl Mikrosekunden, die gewartet werden soll
Rückgabe
Die Funktion gibt true zurück, wenn Daten zum Lesen bereitstehen, sonst false. Im Fehlerfall wird eine Exception geworfen.
Ausnahmebehandlung
Diverse
bool ppl7::TCPSocket::waitForMessage ( SocketMessage msg,
int  timeout_seconds = 0,
Thread watch_thread = NULL 
)
Beschreibung:

Mit der Klasse ppl6::CpplSocketMessage und den Funktionen CpplSocket::Write und CpplSocket::WaitForMessage lassen sich bequem Nachrichten per TCP austauschen.

Jedes Nachrichtenpaket besteht dabei aus einem Header und den Nutzdaten.

Aufbau des Headers Version 1
Version 1 besteht aus einem 20 Byte langem Header mit folgendem Aufbau:
Byte 0: "V" (1 Byte)
Byte 1: Version=1 (1 Byte)
Byte 2: CommandId (2 Byte)
Byte 4: Id (4 Byte)
Byte 8: Bytes Nutzdaten (4 Byte)
Byte 12: Flags (1 Byte)
Bit 0: Zlib-Kompression
Bit 1: Client supports Zlib
Bit 2: Client supports MsgChannel
Byte 13: Datatype, PPL_ARRAY, usw. (1 Byte)
Byte 14: Zufallszahl (2 Byte)
Byte 16: CRC-Summe über den Header (4 Byte)

Die CRC-Summe wird über die ersten 16 Byte des Headers gebildet (siehe ppl6::crc32). Alle mehrbyteigen Werte müssen in Network-Byte-Order (Big Endian) angegeben werden.

Aufbau des Headers Version 2
Der Version 2-Header ist 4 Byte länger, die eine zusätzliche CRC-Summe über die Nutzdaten enthalten.
Byte 0: "V" (1 Byte)
Byte 1: Version=2 (1 Byte)
Byte 2: CommandId (2 Byte)
Byte 4: Id (4 Byte)
Byte 8: Bytes Nutzdaten (4 Byte)
Byte 12: Flags (1 Byte)
Bit 0: Zlib-Kompression
Bit 1: Client supports Zlib
Bit 2: Client supports MsgChannel
Byte 13: Datatype, PPL_ARRAY, usw. (1 Byte)
Byte 14: Zufallszahl (2 Byte)
Byte 16: CRC-Summe über die Nutzdaten (4 Byte)
Byte 20: CRC-Summe über den Header (4 Byte)
Die CRC-Summe des Headers wird über die ersten 20 Byte des Headers gebildet (siehe ppl6::crc32). Alle mehrbyteigen Werte müssen in Network-Byte-Order (Big Endian) angegeben werden.
bool ppl7::TCPSocket::waitForOutgoingData ( int  seconds,
int  useconds 
)
Beschreibung:
Diese Funktion prüft, ob Daten auf den Socket geschrieben werden können. Ist dies der Fall, kehrt sie sofort wieder zurück. Andernfalls wartet sie solange, bis der Socket beschrieben werden kann, maximal aber die mit seconds und useconds angegebene Zeitspanne. Falls seconds und useconds Null sind, und keine Daten gesendet werden können, kehrt die Funktion sofort zurück.
Parameter
[in]secondsAnzahl Sekunden, die gewartet werden soll
[in]usecondsAnzahl Mikrosekunden, die gewartet werden soll
Rückgabe
Die Funktion gibt true zurück, wenn Daten geschrieben werden können, sonst false. Im Fehlerfall wird eine Exception geworfen.
Ausnahmebehandlung
Diverse
size_t ppl7::TCPSocket::write ( const String str,
size_t  bytes = 0 
)
size_t ppl7::TCPSocket::write ( const WideString str,
size_t  bytes = 0 
)
size_t ppl7::TCPSocket::write ( const ByteArrayPtr bin,
size_t  bytes = 0 
)
size_t ppl7::TCPSocket::write ( const void *  buffer,
size_t  bytes 
)
Beschreibung:
Mit dieser Funktionen werden bytes Bytes aus dem Speicherbereich buffer an die Gegenstelle gesendet.
Parameter
[in]bufferPointer auf die zu sendenden Daten
[in]bytesAnzahl zu sendender Bytes
Rückgabe
Wenn die Daten erfolgreich geschrieben wurden, gibt die Funktion die Anzahl geschriebener Bytes zurück. Im Fehlerfall wird eine Exception geworfen.
size_t ppl7::TCPSocket::write ( const SocketMessage msg)
Beschreibung:

Mit der Klasse ppl6::CpplSocketMessage und den Funktionen CpplSocket::Write und CpplSocket::WaitForMessage lassen sich bequem Nachrichten per TCP austauschen.

Jedes Nachrichtenpaket besteht dabei aus einem Header und den Nutzdaten.

Aufbau des Headers Version 1
Version 1 besteht aus einem 20 Byte langem Header mit folgendem Aufbau:
Byte 0: "V" (1 Byte)
Byte 1: Version=1 (1 Byte)
Byte 2: CommandId (2 Byte)
Byte 4: Id (4 Byte)
Byte 8: Bytes Nutzdaten (4 Byte)
Byte 12: Flags (1 Byte)
Bit 0: Zlib-Kompression
Bit 1: Client supports Zlib
Bit 2: Client supports MsgChannel
Byte 13: Datatype, PPL_ARRAY, usw. (1 Byte)
Byte 14: Zufallszahl (2 Byte)
Byte 16: CRC-Summe über den Header (4 Byte)

Die CRC-Summe wird über die ersten 16 Byte des Headers gebildet (siehe ppl6::crc32). Alle mehrbyteigen Werte müssen in Network-Byte-Order (Big Endian) angegeben werden.

Aufbau des Headers Version 2
Der Version 2-Header ist 4 Byte länger, die eine zusätzliche CRC-Summe über die Nutzdaten enthalten.
Byte 0: "V" (1 Byte)
Byte 1: Version=2 (1 Byte)
Byte 2: CommandId (2 Byte)
Byte 4: Id (4 Byte)
Byte 8: Bytes Nutzdaten (4 Byte)
Byte 12: Flags (1 Byte)
Bit 0: Zlib-Kompression
Bit 1: Client supports Zlib
Bit 2: Client supports MsgChannel
Byte 13: Datatype, PPL_ARRAY, usw. (1 Byte)
Byte 14: Zufallszahl (2 Byte)
Byte 16: CRC-Summe über die Nutzdaten (4 Byte)
Byte 20: CRC-Summe über den Header (4 Byte)
Die CRC-Summe des Headers wird über die ersten 20 Byte des Headers gebildet (siehe ppl6::crc32). Alle mehrbyteigen Werte müssen in Network-Byte-Order (Big Endian) angegeben werden.
size_t ppl7::TCPSocket::writef ( const char *  fmt,
  ... 
)

Dokumentation der Datenelemente

int ppl7::TCPSocket::connect_timeout_sec
private
int ppl7::TCPSocket::connect_timeout_usec
private
bool ppl7::TCPSocket::connected
private
String ppl7::TCPSocket::HostName
private
bool ppl7::TCPSocket::islisten
private
Mutex ppl7::TCPSocket::mutex
private
int ppl7::TCPSocket::PortNum
private
void* ppl7::TCPSocket::socket
private
String ppl7::TCPSocket::SourceInterface
private
int ppl7::TCPSocket::SourcePort
private
void* ppl7::TCPSocket::ssl
private
SSLContext* ppl7::TCPSocket::sslcontext
private
bool ppl7::TCPSocket::stoplisten
private

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: