Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Datenübertragung bei verbindungsloser Kommunikation

&pagelevel(4)&pagelevel

Mit der Funktion sendto() senden Sie Daten von einem Socket zu einem anderen Socket:

sendto(s, buf, buflen, flags, (struct sockaddr *)&to, tolen);

Die Parameter s, buf, buflen und flags verwenden Sie genauso wie bei verbindungsorientierten Sockets. Die Zieladresse übergeben Sie mit to und die Länge der Adresse mit tolen. Bei Benutzung eines Datagramm-Sockets werden dem Sender keine Fehler mitgeteilt. Verfügt das System lokal über die Information, dass eine Nachricht nicht übertragen werden kann (z.B. wenn ein Netz nicht erreichbar ist), dann liefert der Aufruf sendto() den Wert -1 zurück und die globale Variable errno enthält den entsprechenden Fehler-Code.

Für den Empfang einer Nachricht über einen Datagramm-Socket verwenden Sie die Funktion recvfrom():

recvfrom(s, buf, buflen, flags, (struct sockaddr *)&from, &fromlen);

Der Parameter fromlen enthält zu Beginn die Größe des Puffers from. Bei Rückkehr der Funktion recvfrom() gibt fromlen die Größe der Adresse des Sockets an, von dem das Datagramm empfangen wurde.

Wahlweise können Sie vor einem sendto()- bzw. recvfrom()-Aufruf mit connect() eine bestimmte Zieladresse für einen Datagramm-Socket festlegen. In diesem Fall führt ein Aufruf von sendto() bzw. recvfrom() zu folgendem Verhalten:

  • Daten, die der Prozess mit sendto() ohne explizite Angabe einer Zieladresse abschickt, werden automatisch an den Partner mit der im connect()-Aufruf angegebenen Zieladresse gesendet.

  • Ein Benutzer-Prozess erhält mit recvfrom() ausschließlich Daten vom Partner mit der im connect()-Aufruf spezifizierten Adresse.

Für einen Datagramm-Socket kann mit connect() zu einem bestimmten Zeitpunkt immer nur eine Zieladresse spezifiziert sein. Mit einem weiteren connect()-Aufruf können Sie jedoch eine andere Zieladresse für den Socket festlegen.

Ein connect()-Aufruf für einen Datagramm-Socket kehrt sofort zurück. Das System speichert lediglich die Adresse des Kommunikationspartners.