| Socketopties in Unix zijn parameters die het gedrag van een socket bepalen. Hiermee kunt u verschillende aspecten van de netwerkcommunicatie verfijnen, zoals het niveau van foutcontrole, de manier waarop gegevens worden verzonden en de algehele prestaties van uw toepassing. Deze opties worden ingesteld met behulp van de `setsockopt()` systeemaanroep en opgehaald met `getsockopt()`.
Socketopties zijn geordend op *niveaus* en *namen*. Het niveau specificeert de protocollaag waarop de optie van toepassing is, terwijl de naam de specifieke optie binnen dat niveau identificeert. Gemeenschappelijke niveaus zijn onder meer:
* `SOL_SOCKET`: Dit niveau geldt voor alle typen stopcontacten. Opties op dit niveau beïnvloeden het algemene socketgedrag. Voorbeelden zijn onder meer:
* `SO_REUSEADDR`: Maakt binding aan een poort mogelijk die al de status TIME_WAIT heeft. Handig voor servers die snel opnieuw moeten opstarten.
* `SO_REUSEPORT`: Maakt het mogelijk dat meerdere processen zich aan hetzelfde adres en dezelfde poort binden. Handig voor taakverdeling en serverclustering.
* `SO_BROADCAST`: Maakt het verzenden van broadcastberichten mogelijk.
* `SO_KEEPALIVE`: Maakt het mogelijk dat keep-alive-sondes verbroken verbindingen detecteren.
* `SO_LINGER`: Bepaalt hoe de socket zich gedraagt wanneer deze gesloten is. Zorgt voor een sierlijke afsluiting of onmiddellijke sluiting.
* `SO_SNDBUF` en `SO_RCVBUF`: Stel respectievelijk de verzend- en ontvangstbuffergroottes in. Door deze aan te passen, kunnen de prestaties verbeteren.
* `SO_ERROR`: Haalt openstaande foutcondities op de socket op.
* `IPPROTO_IP`: Dit niveau is van toepassing op IPv4-sockets. Opties hier beïnvloeden hoe de IP-laag met pakketten omgaat. Voorbeelden zijn onder meer:
* `IP_TOS`: Stelt de Type of Service (ToS)-bits in de IP-header in. Gebruikt voor Quality of Service (QoS)-overwegingen.
* `IP_TTL`: Stelt de Time To Live (TTL)-waarde in, die de levensduur van een pakket beperkt.
* `IPPROTO_IPV6`: Dit niveau is vergelijkbaar met `IPPROTO_IP` maar dan voor IPv6-sockets. Veel opties zijn analoog aan hun IPv4-tegenhangers.
* `IPPROTO_TCP`: Dit niveau is van toepassing op TCP-sockets. Opties hier regelen TCP-specifiek gedrag. Voorbeelden zijn onder meer:
* `TCP_NODELAY`: Schakelt het Nagle-algoritme uit, dat kleine pakketten buffert voordat ze worden verzonden. Handig voor interactieve toepassingen, maar kan de efficiëntie bij bulkoverdrachten verminderen.
* `IPPROTO_UDP`: Dit niveau is van toepassing op UDP-sockets. Er zijn hier relatief weinig opties vergeleken met TCP.
Voorbeeld (C):
Dit voorbeeld laat zien hoe u de `SO_REUSEADDR` optie instelt met behulp van `setsockopt()`:
```c
#include
#include
#include
#include
#include
#include
#include
int hoofd() {
int sockfd;
struct sockaddr_in serv_addr;
int opt =1; // Om SO_REUSEADDR in te schakelen
sockfd =socket(AF_INET, SOCK_STREAM, 0);
als (sockfd <0) {
perror("Fout bij openen socket");
uitgang(1);
}
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, groottevan(opt)) <0) {
perror("setsockopt mislukt");
uitgang(1);
}
// ... rest van uw socketcode ...
sluiten(sokfd);
retour 0;
}
```
Dit codefragment creëert een TCP-socket en stelt de optie `SO_REUSEADDR` in. Foutafhandeling is opgenomen om best practices te tonen. Vergeet niet de handleidingpagina's van uw systeem (`man 7 socket`) te raadplegen voor een volledige lijst met beschikbare socketopties en hun gebruik. De beschikbaarheid en het gedrag van specifieke opties kunnen enigszins variëren, afhankelijk van het besturingssysteem en de kernelversie. |