Socket-Timeout in C ++ Linux

8

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?

    
Angel.King.47 31.05.2009, 23:41
quelle

3 Antworten

7

Am einfachsten ist es, ein alarm einzurichten und connect mit einem Signal zu unterbrechen (siehe UNP 14.2):

%Vor%

Obwohl select nicht viel härter ist :)
Vielleicht möchten Sie auch rohe Sockets kennenlernen.

    
Nikolai Fetissov 01.06.2009, 00:08
quelle
2

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: Ссылка

    
DarkSquid 01.06.2009 00:12
quelle
1

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

    
Angel.King.47 06.07.2009 11:53
quelle

Tags und Links