Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

soc_write(), soc_writev() (write, writev) - Nachricht von Socket zu Socket senden

&pagelevel(4)&pagelevel

#include <sys.socket.h>

Kernighan-Ritchie-C:
int soc_write(s, buf, nbytes);

int s;
char *buf;
int nbytes;

#include <sys.types.h>
#include <sys.uio.h>

int soc_writev(s, iov, iovcnt)

int s;
struct iovec *iov;
int iovcnt;

ANSI-C:
int soc_write(int s, char* buf, int nbytes);
int soc_writev(int s, struct iovec* iov, int iovcnt);


Beschreibung

Die Funktionen soc_write() und soc_writev() unterstützen folgende Wege der Nachrichtenübermittlung:

  • Nachrichten von einem Stream-Socket s an einen anderen Stream-Socket (AF_INET, AF_INET6)

  • Nachrichten von einem „connected“ Datagramm-Socket an einen anderen Socket (AF_INET, AF_INET6)

  • Nachrichten von einem Socket s der Adressfamilie AF_ISO an einen anderen Socket der Adressfamilie AF_ISO.

soc_write() und soc_writev() können nur benutzt werden, wenn zwischen den beiden Sockets eine Verbindung aufgebaut ist.

Bei soc_write() zeigt der Parameter buf auf das erste Byte des Sendepuffers und nbytes spezifiziert die Länge (in Bytes) des Sendepuffers.

Bei soc_writev() werden die zu sendenden Daten im Vektor mit den Elementen iov[0], iov[1], ... ,iov[iovcnt-1] bereitgestellt. Die Vektorelemente sind Objekte vom Typ struct iovec. iovcnt gibt die Anzahl der Vektorelemente an.

Die Struktur iovec ist in <sys.uio.h> wie folgt deklariert:

struct iovec{
    caddr_t  iov_base;  /* Puffer für Hilfsdaten */
    int      iov_len;    /* Pufferlänge */
};

Im Parameter iov wird die Adresse des Vektors übergeben. Jedes Vektorelement spezifiziert Adresse und Länge eines Speicherbereichs, aus dem soc_writev() Daten ausliest, um sie an den Empfänger-Socket s zu senden. 

Returnwert

>=0:

bei Erfolg (Anzahl der tatsächlich gesendeten Bytes).

-1:

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehleranzeige durch errno

EBADF

Der Parameter s ist kein gültiger Deskriptor.

ECONNRESET

Die Verbindung zum Partner wurde abgebrochen (nur bei Sockets vom Typ SOCK_STREAM).

EINVAL

Ein Parameter spezifiziert einen ungültigen Wert.

EIO

E/A-Fehler. Die Nachricht konnte nicht an das Transportsystem übergeben werden.

ENETDOWN

Die Verbindung zum Netzwerk ist nicht mehr aktiv.

ENOTCONN

Für den Socket besteht keine Verbindung.

EOPNOTSUPP

Der Socket-Typ wird nicht unterstützt. Der Socket ist nicht vom Typ SOCK_STREAM.

EPIPE

Der Socket ist nicht für Schreiben aktiviert, oder der Socket ist verbindungsorientiert und der Partner hat die Verbindung beendet.

EWOULDBLOCK

Der Socket ist als nicht-blockierend markiert, und die geforderte Operation würde blockieren.

Hinweis

Wird die Verbindung mit einem nicht-blockierenden Socket aufgebaut, kann es beim nächsten Funktionsaufruf zur errno EINPROGRESS kommen. Diese Meldung weist darauf hin, dass die Verbindung noch nicht in dem Zustand ist, in dem eine Datentransferphase möglich ist.

Siehe auch

connect(), getsockopt(), recv(), select(), soc_read(), soc_readv(), socket()