C standard library :: socket
send - Send en message til en forbundet socket
Denne funktion sender en message til en forbindelses- eller forbindelsesløs-orienteret socket angivet med fd. Den anvendes normalt med forbundne sockets fordi den ikke tillader applikationen af opdyrke modtagerens addresse for de afsendte data.
Følgende parametre anvendes:
- fd
- Angiver socket file descriptor.
- buf
- Peger til hvor message findes der skal sendes.
- n
- Angiver længden af buf
- flags
- Angiver typen af message der sendes. Værdien er formet af logisk OR'er hvis flere at følgende typer ønskes:
- MSG_EOR
- Afslutter en record (hvis protokollen supporterer dette).
- MSG_OOB
- Sender out-of-band data på en protokol der supporterer out-of-band transmission. Betydningen og semantikken for out-of-band data er protokol-specifik.
Længden af message der sendes angives i n parameteren. Hvis message er for lang i forhold den underliggende protokol fejler funktionen og der sendes ingen data.
Om en message rent faktisk når frem til modtageren afspejles ikke af returværdien der kun afspejler fejl der er fundet lokalt. Det kan også betyde af funktionen kan returnere værdien -1 (fejl), men transmissionen kan godt nå frem til modtageren.
Hvis nødvendig plads ikke er tilgængelig ved socket der sender for den message der skal sendes og socket file descriptor ikke har O_NONBLOCK sat skal funktionen blokere indtil krævet plads er tilgængelig. Hvis nødvendig plads ikke er tilgængelig ved socket der sender for den message der skal sendes og socket file descriptor har O_NONBLOCK sat skal funktionen fejle. Funktionerne select() og poll() kan anvendes til at afgøre om det er muligt at sende flere data.
Socket'en der anvendes kan kræve at process har nødvendige rettigheder for at anvende funktionen.
Retur værdi
Ved success returnerer funktionen antallet af bytes sendt. Ellers returneres -1 og errno sættes til at give årsagen på fejlen.
Fejl
Funktionen skal fejle hvis:
- [EAGAIN] eller [EWOULDBLOCK]
- Socket file descriptor er markeret O_NONBLOCK og operationen vil blokere.
- [EBADF]
- Parameteren fd er ikke en valid file descriptor.
- [ECONNRESET]
- En forbindelse blev forceret nedlukket af fjernenden af forbindelsen.
- [EDESTADDRREQ]
- Socket er ikke forbindelses-orienteret og fjernendens adresse er ikke sat.
- [EINTR]
- Modtager funktionen blev afbrudt af et indfanget signal før data blev tilgængelige.
- [EMSGSIZE]
- Message er for stor til at kunne sende på en gang som denne socket kræver det.
- [ENOTCONN]
- Socket er ikke forbundet eller socket kender ikke fjernenden.
- [ENOTSOCK]
- Parameter fd refererer ikke til en socket.
- [EOPNOTSUPP]
- Denne option er ikke supporteret af protokollen.
- [EOPNOTSUPP]
- Parameter fd er associeret med en socket der ikke tillader en eller flere af værdierne for flags..
- [EPIPE]
- Socket er nedlukket for skrivning eller socket er forbindelses-orienteret og ikke længere forbundet. I det sidste tilfælde hvis socket er af typen SOCK_STREAM, genereres SIGPIPE signal til den kaldende tråd.
Funktionen kan fejle hvis:
- [EACCES]
- Den kaldende process har ikke de fornødne rettigheder.
- [EIO]
- En I/O fejl opstod medens læsning eller skrivning til fil-systemet pågik.
- [ENETDOWN]
- Det lokale netværksinterface anvendt til at nå destinationen er nede.
- [ENETUNREACH]
- Ingen rute til dette netværk er tilgængelig.
- [ENOBUFS]
- Utilstrækkelige ressourcer tilstede i systemet for at gennemføre kaldet.
- [ENOMEM]
- Der var ikke tilstrækkeligt med memory tilgængelig for at fuldføre operationen.