Le opzioni socket sono organizzate con *livelli *e *nomi *. Il livello specifica il livello di protocollo a cui si applica l'opzione, mentre il nome identifica l'opzione specifica a quel livello. I livelli comuni includono:
* `sol_socket`: Questo livello si applica a tutti i tipi di socket. Le opzioni a questo livello influiscono sul comportamento generale della presa. Esempi includono:
* `so_reuseaddr`: Consente l'associazione a una porta già nello stato time_wait. Utile per i server che devono riavviare rapidamente.
* `so_reuseport`: Consente a più processi di legarsi allo stesso indirizzo e porta. Utile per il bilanciamento del carico e il clustering del server.
* `So_Broadcast`: Abilita l'invio di messaggi di trasmissione.
* `so_eughealive`: Abilita le sonde ziive di rilevare connessioni rotte.
* `so_linger`: Controlla come si comporta la presa quando è chiusa. Consente un arresto grazioso o una chiusura immediata.
* `so_sndbuf` e` so_rcvbuf`: Imposta le dimensioni del buffer di invio e ricevere, rispettivamente. Regolando questi può migliorare le prestazioni.
* `so_error`: Recupera le condizioni di errore in sospeso sul socket.
* `ipproto_ip`: Questo livello si applica alle prese IPv4. Le opzioni qui influenzano il modo in cui il livello IP gestisce i pacchetti. Esempi includono:
* `ip_tos`: Imposta i bit del tipo di servizio (TOS) nell'intestazione IP. Utilizzato per le considerazioni di qualità del servizio (QoS).
* `ip_ttl`: Imposta il valore del tempo per vivere (TTL), che limita la durata di un pacchetto.
* `ipproto_ipv6`: Questo livello è simile a `ipproto_ip` ma per le prese IPv6. Molte opzioni sono analoghe alle loro controparti IPv4.
* `ipproto_tcp`: Questo livello si applica alle prese TCP. Le opzioni qui controllano i comportamenti specifici del TCP. Esempi includono:
* `tcp_nodelay`: Disabilita l'algoritmo Nagle, che limita i piccoli pacchetti prima di inviare. Utile per applicazioni interattive, ma può ridurre l'efficienza per i trasferimenti di massa.
* `ipproto_udp`: Questo livello si applica alle prese UDP. Le opzioni qui sono relativamente poche rispetto al TCP.
Esempio (c):
Questo esempio mostra come impostare l'opzione `so_reuseaddr` usando` setsockopt () `:
`` `c
#include
#include
#include
#include
#include
#include
#include
int main () {
int Sockfd;
struct Sockaddr_in Serv_addr;
int opt =1; // per abilitare SO_REUSEADDR
Sockfd =Socket (Af_inet, Sock_Stream, 0);
if (Sockfd <0) {
Perror ("Errore di apertura della presa");
uscita (1);
}
if (setsockopt (Sockfd, Sol_socket, SO_REUSEADDR, &opt, sizeof (opt)) <0) {
perror ("setsockopt non riuscito");
uscita (1);
}
// ... Resto del codice socket ...
Close (Sockfd);
restituzione 0;
}
`` `
Questo frammento di codice crea una presa TCP e imposta l'opzione `So_reuseaddr`. La gestione degli errori è inclusa per mostrare le migliori pratiche. Ricorda di consultare le pagine manuali del tuo sistema (`Man 7 Socket`) per un elenco completo delle opzioni di socket disponibili e il loro utilizzo. La disponibilità e il comportamento di opzioni specifiche possono variare leggermente a seconda del sistema operativo e della versione del kernel.
Informazioni correlate
sistemi © www.354353.com