sendto() - Signatur

#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));

Hilfe unter Linux

$ man sendto

Beispiele

Eine Zeichenkette senden

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. */

Daten senden

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 */
}