#include<sys/types.h>
#include<sys/socket.h>
int sendto(int sockfd, const void *msg, int msglen, int flags, const struct sockaddr *to, int tolen);
sockfd
bestimmt den Socket, der zum Senden verwendet werden soll.
msg
ist der Buffer in dem die Nachricht steht 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).
to
gibt an, an welche Adresse die Nachricht gesendet werden soll und
tolen
bestimmt die Länge dieser Adresse in Bytes.
Die Anzahl der gesendeten Bytes wird zurückgegeben (oder -1 bei einem Fehler).
ANMERKUNG: bevor sendto() verwendet wird, sollte der entsprechende Socket an
irgendeinen Port gebunden werden. Dies erfolgt so:
struct sockaddr_in localaddr;
localaddr.sin_family = PF_INET;
localaddr.sin_addr.s_addr = INADDR_ANY; /* IP-Adresse ist egal */
localaddr.sin_port = 0; /* Port ist egal*/
bind(socketfd, (struct sockaddr *)&localaddr, sizeof(localaddr));
$ man sendto
char *buffer = "Noch bessere Zeichenkette";
int bytes;
struct sockaddr_in addr;
addr.sin_family = PF_INET;
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = 1500; /* natürlich kann jeder beliebige Port gewählt werden */
if(sendto(socketfd, buffer, strlen(buffer), 0, (struct sockaddr *)addr, sizeof(addr)) == -1){
/* Fehler */
}
/* Anmerkung: Beim Senden von Zeichenketten wird das abschließende '\0' nicht mitgeschickt.
Darum muss sich der Empfänger darum kümmern es wieder anzuhängen.
*/
char buffer[1024];
int bytes;
struct sockaddr_in addr;
fill(buffer); /* Buffer mit Daten füllen */
addr.sin_family = PF_INET;
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = 1500; /* natürlich kann jeder beliebige Port gewählt werden */
if(sendto(socketfd, buffer, sizeof(buffer), 0, (struct sockaddr *)addr, sizeof(addr)) == -1){
/* Fehler */
}