Ich schreibe ein einfaches Programm, das mehrere Verbindungen zu verschiedenen Servern für die Statusüberprüfung herstellt. Alle diese Verbindungen sind auf Abruf aufgebaut; Bis zu 10 Verbindungen können gleichzeitig erstellt werden. Ich mag die Idee von Ein-Thread-pro-Socket nicht, also habe ich all diese Client-Sockets Non-Blocking gemacht und sie in einen select() -Pool geworfen.Wie wird das Socket-Timeout in C festgelegt, wenn mehrere Verbindungen hergestellt werden?
Es funktionierte großartig, bis mein Client beschwerte, dass die Wartezeit zu lang ist, bevor sie den Fehlerbericht erhalten können, wenn die Zielserver nicht mehr reagierten.
Ich habe mehrere Themen im Forum geprüft. Einige hatten vorgeschlagen, dass man das alarm() Signal verwenden oder ein Timeout im Funktionsaufruf select() einstellen kann. Aber ich habe es mit mehreren Verbindungen zu tun, anstatt mit einer. Wenn ein prozessweites Timeout-Signal auftritt, kann ich die Timeout-Verbindung zwischen allen anderen Verbindungen nicht unterscheiden.
Gibt es trotzdem eine Änderung der System-Standard Timeout-Dauer?
Meinst du connect() dauert zu lange, um Timeout oder Sie sind alrea dy verbunden und durchlaufen eine lange Zeit, wenn es nichts zu lesen gibt? – Duck
@Duck: Mein Problem ist, dass connect() zu lange dauert, bis es zu einem Timeout kommt. Jede Verbindung in meinem Programm ist vorübergehend; Es sollte sofort getrennt werden, nachdem ein Status-Check-Handshake-Vorgang durchgeführt wurde. In meinem Fall muss die TCP_KEEP_ALIVE-Dauer nicht individuell angepasst werden. – RichardLiu