Okay, zuerst möchte ich erwähnen, was ich mache, ist völlig ethisch und ja ich bin Port-Scan.
Das Programm läuft gut, wenn der Port offen ist, aber wenn ich zu einem geschlossenen Socket komme, hält das Programm für eine sehr lange Zeit an, weil es keine Time-Out-Klausel gibt. Unten ist der folgende Code
%Vor%Ich habe diesen Überlauf auf dem Stack gefunden, aber es macht einfach keinen Sinn für mich, auszuwählen () Befehl.
Frage ist, können wir das connect () -Funktions-Timeout machen, also warten wir nicht ein Jahr, damit es mit einem Fehler zurückkommt?
Am einfachsten ist es, ein alarm
einzurichten und connect
mit einem Signal zu unterbrechen (siehe UNP 14.2):
Obwohl select
nicht viel härter ist :)
Vielleicht möchten Sie auch rohe Sockets kennenlernen.
Wenn Sie blockierende E / A-Operationen verwenden, um dies zu erledigen, sollten Sie den Aufruf von setsockopt () untersuchen, insbesondere das SO_SNDTIMEO-Flag (oder andere Flags, abhängig von Ihrem Betriebssystem).
Seien Sie vorgewarnt, diese Flags sind nicht zuverlässig / portabel und können auf verschiedenen Plattformen oder verschiedenen Versionen einer bestimmten Plattform unterschiedlich implementiert werden.
Der beste Weg, dies zu tun, ist der nonblocking-Ansatz, der select () verwendet. Wenn Sie Sockets neu kennen, ist eines der besten Bücher TCP / IP Illustrated, Volume 1: The Protocols. Es ist bei Amazon unter: Ссылка
RudeSocket hat das Problem gelöst
Ich habe eine lib-Datei gefunden, die in Linux Fedora getestet wurde (Nicht sicher über Windows), die mir die Option der Zeitüberschreitung gibt. Im Folgenden finden Sie ein sehr einfaches Beispiel.
%Vor%Hier ist ein Link zur DevSite