C standard library :: socket
getsockopt - Hent socket optioner
Denne funktion skal hente værdien af optioner fra socket angivet med file descriptor fd. Optionen der forespørges angives med optname parameteren, protokolniveau angives med level og selve værdien til option angives med en peger optval til lagring af værdien og i tillæg til værdien dens byte længde i optlen.
Parameteren level angiver et protokolniveau ved hvilket optioner tilhører. For at sætte optioner ved socket-niveau, angiv level parameteren som SOL_SOCKET. For at sætte optioner på andre niveauer, angiv den ønskede level symbolnavn for protokollen der kontrollerer optionen. F.eks. for at sætte en option tilhørende TCP (Transport Control Protocol), sæt level til IPPROTO_TCP som defineret i <netinit/in.h> headeren.
Parameteren optname angiver en enkelt options værdi at hente. Denne optname parameter og hvilken som helst angivet option overføres til det angivne protokol-modul for fortolkning. Header <sys/socket.h> definerer socket-level optioner. Disse optioner er:
- SO_TYPE
- Hent typen af socket, kan kun anvenden med getsocketopt().
- SO_DEBUG
- Optagelse af debug-informationer. Denne option åbner og lukker debug-informationer i det underliggende protokol-modul. Denne option er en int værdi. Dette er en boolsk option.
- SO_BROADCAST
- Tillader udsendelse af broadcast message, hvis den er supporteret af protokollen. Denne option er en int værdi. Dette er en boolsk option.
- SO_REUSEADDR
- Angiver at reglerne anvendt i validering af adresser forsynet til bind() skal tillades genbruges af lokale adresser, hvis det er supporteret af protokollen. Denne option er en int værdi. Dette er en boolsk option.
- SO_KEEPALIVE
- Holder forbindelsen aktiv ved at starte en periodisk transmission af message, hvis dette er supporteret af protokollen. Hvis den forbundne socket fejler at respondere på denne message, vil forbindelsen afbrydes og tråde der skriver til denne socket får besked med et SIGPIPE signal. Denne option er en int værdi. Dette er en boolsk option.
- SO_LINGER
- Holde en close() tilbage hvis data er tilstede. Denne option kontrollerer handlingen når close() udføres, sålænge der i køen på en socket er ikke sendte message holdes handlingen tilbage for close(). Hvis SO_LINGER er sat vil systemet blokere den kaldende tråd igennem close() indtil den kan transmittere alle data eller indtil en given tid er udløbet. Hvis SO_LINGER ikke er sat og close() er kaldt vil systemet håndtere kaldet på den måde at den kaldende tråd kan fortsætte så hurtigt som muligt. Denne option bruger en linger struktur som er defineret i <sys/socket.h> headeren.
- SO_OOBINLINE
- Efterlader modtagne out-of-band data (data markeret urgent) inline. Denne option er en int værdi. Dette er en boolsk option.
- SO_SNDBUF
- Sætter send-buffer størrelsen. Denne option er en int værdi.
- SO_RCVBUF
- Sætter modtager-buffer størrelsen. Denne option er en int værdi.
- SO_DONTROUTE
- Anmoder at udgående message omgår standard rutnings faciliteter. Destinationen skal være på en direkte forbundet netværk, og messages er direkte til det rette netværksinterface i henhold til destinationsadressen. Effekten, hvis nogen overhovedet afhænger af hvilken protokol der er anvendt. Denne option er en int værdi. Dette er en boolsk option.
- SO_RCVLOWAT
- Sætter minimum antal byte til et forløb for socket input-operationer. Normal værdien er 1. Hvis SO_RCVLOWAT er sat til en større værdi, blokeres modtager kaldet og venter normalt indtil minimum antal bytes er modtaget. (Der kan returneres selvom minimum antal bytes ikke er modtaget, hvis en fejl opstår eller et signal er indfanget, eller hvis typen af data efterfølgende er af en anden type end de returnerede; f.eks. out-of-band data). Denne option er en int værdi. Bemærk at ikke alle implementeringer tillader denne option.
- SO_RCVTIMEO
- Sætter timeout værdien som angiver den maksimale tid en input-funktion venter indtil den afsluttes. Den accepterer et timeval struktur med antal sekunder og mikrosekunder som angiver grænsen for hvor lang tid at vente på en input-operation bliver færdig. Hvis en input-operation har blokeret i for lang tid unden af modtage yderligere data skal den returnere med en delvis tæller eller errno sat til [EAGAIN] eller [EWOULDBLOCK] hvis ingen data er modtaget. Standardværdien for denne option er 0, hvilket betyder at input-operationen ikke anvender timeout. Denne option anvender timeval strukturen. Bemærk at ikke alle implementeringer tillader denne option.
- SO_SNDLOWAT
- Sætter minimum antal byte til et forløb for socket output-operationer. Denne option er en int værdi. Bemærk at ikke alle implementeringer tillader denne option.
- SO_SNDTIMEO
- Sætter timeout værdien som angiver den maksimale tid en output-funktion venter indtil den afsluttes. Flowkontrol kan forhindre data i at blive sendt. Hvis en send-operation ikke lykkes indenfor angive tid skal funktionen returnere med en delvis tæller eller med errno sat til [EAGAIN] eller [EWOULDBLOCK] hvis ingen data er sendt. Standardværdien for denne option er 0, hvilket betyder at output-operationen ikke anvender timeout. Denne option anvender timeval strukturen. Bemærk at ikke alle implementeringer tillader denne option.
For boolske værdier betyder 0 optionen fravalgt og 1 optionen tilvalgt.
Retur værdi
Ved succesfuld udførelse returneres 0. Ellers -1 og errno sat til at indikere årsag.
Fejl
Funktionen skal fejle hvis:
- [EBADF]
- Parameteren fd er ikke en valid file descriptor.
- [EINVAL]
- Den angivne optioner er invalid.
- [ENOPROTOOPT]
- Denne option er ikke supporteret af protokollen.
- [ENOTSOCK]
- Parameter fd refererer ikke til en socket.
Funktionen kan fejle hvis:
- [EACCES]
- Den kaldende process har ikke de nødvendige rettigheder.
- [EINVAL]
- Socket er lukket ned.
- [ENOBUFS]
- Utilstrækkelige ressourcer tilstede i systemet for at gennemføre kaldet.