ssize_t send( int socket, const void *buffer, size_t length, int flags);
Mit der Funktion send() wird der Inhalt des Puffers buffer mittels des Sockets socket versendet. Die Anzahl der Zeichen die im Puffer enthalten sind, wird mit dem Parameter length angegeben. In der Socket-Schnittelle ist für jeden Socket ein Sendepuffer enthalten, in den die Daten des Puffers buffer kopiert werden. Die Größe des Sendepuffers hat einen Einfluss auf den zu erzielenden Durchsatz bei einem Stream-Socket:
Der maximal zu erreichende Durchsatz D ist proportional zur Größe des Sendepuffers dividiert durch die Verzögerungszeit, die zur Übertragung von Daten durch das Netzwerk benötigt werden. Ist der Sendepuffer bei einem fest vorgegebenen Verzögerungszeit zu klein, dann ist auch der Durchsatz gering. Ist er dagegen größer als der Durchsatz des Netzwerkes, dann ändert sich nichts am Durchsatz. Es werden lediglich Ressourcen verschwendet. Die Größe des Sendepuffers kann durch Betriebssystemkommandos variiert werden
Passen nicht alle zu sendenden Daten in den Sendepuffer, wird der aufrufende Prozess blockiert. Um die Blockade zu verhindern kann die select()-Funktion verwendet werden. Trotzdem kann es passieren, dass nicht alle Daten gesendet werden. In diesem Fall wird die Anzahl der gesendeten Daten als Rückgabeparameter vermerkt.
Mittels dem Parameter flags können zusätzliche Optionen angegeben werden. In unserem Fall wird dies nicht benötigt.
Die Anzahl der gesendeten Zeichen wird als Rückgabewert geliefert. Konnte kein Zeichen gesendet werden, weil ein Fehler aufgetreten ist, liefert die Funktion den Wert -1.
Die send()-Funktion kann durch die write()-Datei-Funktion ersetzt werden, da - wie erwähnt - ein Socket wie ein Datei-Deskriptor behandelt wird. Deshalb sind Dateifunktionen auch auf Sockets anwendbar.
Beispiel:
int sock; char buffer = "Hallo\n"; written_bytes = send(sock, buffer, 6, 0); if(written_bytes < 0) { perror(“send stream socket”); exit(1); }