C standard library :: socket
recv - Modtag en message fra en forbundet socket
Denne funktion modtager en message fra en forbindelses- eller forbindelsesløs-orienteret socket angivet med fd. Den anvendes normalt med forbundne sockets fordi den ikke tillader applikationen af opdyrke afsenderens addresse for de modtagne data.
Følgende parametre anvendes:
- fd
- Angiver socket file descriptor.
- buf
- Peger til hvor message skal lagres.
- n
- Angiver længden af buf
- flags
- Angiver typen af message der modtages. Værdien er formet af logisk OR'er hvis flere at følgende typer ønskes:
- MSG_PEEK
- Smugkig på en indkommende message. Dataene er behandlet som ulæst hvorved den næste recv() også returnerer disse data.
- MSG_OOB
- Ønsker out-of-band data. Betydningen og semantikken for out-of-band data er protokol-specifik.
- MSG_WAITALL
- På SOCK_STREAM sockets vil denne ønske at funktionen blokerer indtil den fulde mængde af data kan returneres. Funktionen kan returnere en mindre mængde hvis det er en message-baseret socket, hvis et signal indfanges, hvis forbindelsen termineres, hvis MSG_PEEK også var angivet eller hvis en fejl venter på denne socket.
Funktionen returnerer længden af data skrevet til buf. For message-baserede socket som SOCK_DGRAM og SOCK_SEQPACKET skal hele message læses i en enkelt operation. Hvis en message er for lang i forhold til længden af buf og MSG_PEEK ikke er sat i flags bliver overskydende data smides væk.
Hvis MSG_WAILALL flag er sat skal data returneres op til enden af den første message.
Hvis ingen message er tilgængelig til socket og O_NONBLOCK ikke er sat for socket's file descriptor, skal recv() blokere indtil en message ankommer. Hvis ingen message er tilgængelig til socket og O_NONBLOCK er sat for socket's file descriptor, skal recv() fejle og sætte errno til [EAGAIN] eller [EWOULDBLOCK].
Retur værdi
Ved success returnerer funktionen antallet af bytes modtaget. Hvis ingen message var tilgængelig for modtagelse og fjernenden af forbindelsen har foretaget en godkendt nedlukning vil recv() returnere 0. 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 ingen data venter på modtagelse eller MSG_OOB er sat og ingen out-of-band data er tilgængelige og enten er socket file descriptor markeret O_NONBLOCK eller socket supporterer ikke blokering for afventning af out-of-band data.
- [EBADF]
- Parameteren fd er ikke en valid file descriptor.
- [ECONNRESET]
- En forbindelse blev forceret nedlukket af fjernenden af forbindelsen.
- [EINTR]
- Modtager funktionen blev afbrudt af et indfanget signal før data blev tilgængelige.
- [EINVAL]
- Den angivne optioner er invalid eller socket er lukket ned.
- [ENOTCONN]
- En modtagelse forsøgt på en forbindelses-orienteret socket som ikke var forbundet.
- [ENOTSOCK]
- Parameter fd refererer ikke til en socket.
- [EOPNOTSUPP]
- Denne option er ikke supporteret af protokollen.
- [ETIMEDOUT]
- Forbindelsen kunne ikke etableres indenfor accepteret tid eller en transmission udløb for tid.
Funktionen kan fejle hvis:
- [EIO]
- En I/O fejl opstod medens læsning eller skrivning til fil-systemet pågik.
- [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.