recvfrom() - Signatur

#include<sys/types.h>
#include<sys/socket.h>

int recvfrom(int sockfd, void *msg, int msglen, int flags, struct sockaddr *from, int *fromlen);

Diese Funktion wird erst aufgerufen, nachdem sockfd mittels bind() an einen bestimmten Port gebunden wurde. sockfd ist der Socket von dem gelesen werden soll. msg ist der Buffer in den die empfangene Nachricht geschrieben wird und msglen dessen Länge. Mit flags können einige Flags übergeben werden (siehe man page) die jedoch meist nicht benötigt werden (flags = 0). Die Anzahl der gelesenen Bytes wird zurückgegeben (oder -1 bei einem Fehler). Im Parameter from wird gespeichert von wo die Nachricht gekommen ist. Wird from auf NULL gesetzt, wird keine Adresse eingetragen und auch der Parameter fromlen ignoriert, in dem sonst die Länge der Adresse des Senders gespeichert wird.

Hilfe unter Linux

$ man recvfrom

Beispiele

Eine Zeichenkette empfangen

char buffer[1024];
int bytes;

/* Die Adresse des Senders interessiert uns nicht, daher werden die letzten beiden Parameter auf NULL gesetzt */
if((bytes = recvfrom(socketfd, buffer, sizeof(buffer), 0, NULL, NULL)) == -1){
  /* Fehler */
}
/* Anmerkung: Beim Empfangen von Zeichenketten muss das abschließende '\0' angehängt werden. */
buffer[bytes] = '\0';

Daten empfangen

char buffer[1024];
int bytes;

/* Die Adresse des Senders interessiert uns nicht, daher werden die letzten beiden Parameter auf NULL gesetzt */
if((bytes = recvfrom(socketfd, buffer, sizeof(buffer), 0, NULL, NULL)) == -1){
  /* Fehler */
}