Las opciones de socket están organizadas por *niveles *y *nombres *. El nivel especifica la capa de protocolo a la que se aplica la opción, mientras que el nombre identifica la opción específica dentro de ese nivel. Los niveles comunes incluyen:
* `sol_socket`: Este nivel se aplica a todos los tipos de sockets. Las opciones en este nivel afectan el comportamiento general del socket. Los ejemplos incluyen:
* `so_reUSeaddr`: Permite vincularse a un puerto que ya está en el estado de Time_Wait. Útil para servidores que necesitan reiniciar rápidamente.
* `so_reusePort`: Permite que múltiples procesos se unan a la misma dirección y puerto. Útil para el equilibrio de carga y la agrupación del servidor.
* `so_broadcast`: Habilita el envío de mensajes de transmisión.
* `so_keepalive`: Permite las sondas Keep-Alive para detectar conexiones rotas.
* `so_linger`: Controla cómo se comporta el enchufe cuando se está cerrado. Permite el cierre elegante o el cierre inmediato.
* `so_sndbuf` y` so_rcvbuf`: Establezca los tamaños de búfer de envío y recepción, respectivamente. Ajustarlos puede mejorar el rendimiento.
* `so_error`: Recupera condiciones de error pendientes en el enchufe.
* `ipproto_ip`: Este nivel se aplica a los enchufes IPv4. Las opciones aquí influyen en cómo la capa IP maneja los paquetes. Los ejemplos incluyen:
* `ip_tos`: Establece el tipo de bits de servicio (TOS) en el encabezado IP. Utilizado para consideraciones de calidad de servicio (QoS).
* `ip_ttl`: Establece el valor de tiempo para vivir (TTL), lo que limita la vida útil de un paquete.
* `ipproto_ipv6`: Este nivel es similar a `ipproto_ip` pero para enchufes IPv6. Muchas opciones son análogas a sus contrapartes IPv4.
* `ipproto_tcp`: Este nivel se aplica a los enchufes TCP. Las opciones aquí controlan los comportamientos específicos de TCP. Los ejemplos incluyen:
* `tcp_nodelay`: Desactiva el algoritmo Nagle, que amortigua los paquetes pequeños antes de enviar. Útil para aplicaciones interactivas, pero puede reducir la eficiencia para las transferencias a granel.
* `ipproto_udp`: Este nivel se aplica a los enchufes UDP. Las opciones aquí son relativamente pocas en comparación con TCP.
Ejemplo (c):
Este ejemplo muestra cómo establecer la opción `So_reUSeaddr` usando` setSockOpt () `:
`` `C
#Include
#Include
#Include
#Include
#Include
#Include
#include
int main () {
int Sockfd;
struct sockaddr_in serv_addr;
int opt =1; // para habilitar so_reusaaddr
sockfd =socket (AF_INET, SOCK_STREAM, 0);
if (Sockfd <0) {
perror ("error de apertura del socket");
salida (1);
}
if (setSockOpt (Sockfd, sol_socket, so_reUSeaddr, &opt, sizeof (opt)) <0) {
Perror ("SetSockopt falló");
salida (1);
}
// ... el resto de su código de socket ...
cerrar (Sockfd);
regresar 0;
}
`` `` ``
Este fragmento de código crea un socket TCP y establece la opción `So_reUSeaddr`. El manejo de errores se incluye para mostrar las mejores prácticas. Recuerde consultar las páginas manuales de su sistema (`Man 7 Socket`) para una lista completa de las opciones de socket disponibles y su uso. La disponibilidad y el comportamiento de opciones específicas pueden variar ligeramente dependiendo del sistema operativo y la versión del núcleo.