Estoy escribiendo un programa simple que hace conexiones múltiples a diferentes servidores para la verificación de estado. Todas estas conexiones se construyen a pedido; se pueden crear hasta 10 conexiones simultáneamente. No me gusta la idea de un hilo por zócalo, así que hice que todos estos zócalos para clientes sean no bloqueantes y los eché a un grupo select().¿Cómo establecer el tiempo de espera del socket en C al hacer conexiones múltiples?
Funcionó de maravilla, hasta que mi cliente se quejó de que el tiempo de espera es demasiado largo para poder obtener el informe de errores cuando los servidores de destino dejaban de responder.
He revisado varios temas en el foro. Algunos sugirieron que uno puede usar la señal de alarma() o establecer un tiempo de espera en la llamada a la función de selección(). Pero estoy lidiando con múltiples conexiones, en lugar de una. Cuando ocurre una señal de tiempo de espera amplia de proceso, no tengo manera de distinguir la conexión de tiempo de espera entre todas las otras conexiones.
¿Hay alguna forma de cambiar la duración del tiempo de espera predeterminado del sistema?
¿Quieres decir que connect() tarda demasiado tiempo o que estás alrea ¿Está conectado y atraviesa un largo período cuando no hay nada que leer? – Duck
@Duck: Mi problema es que connect() tarda demasiado en agotar el tiempo de espera. Cada conexión en mi programa es temporalmente; se supone que debe desconectarse inmediatamente después de realizar un procedimiento de reconocimiento de estado. No es necesario ajustar la duración de TCP_KEEP_ALIVE individualmente en mi caso. – RichardLiu