Zitat:
Ich sehe da keine Lücken
Also entweder schnalle ich da was nicht oder ich kann dein Source nicht lesen. Hier noch mal die Tabelle aber erweitert:
Code:
ThreadIndex = I Portnummern im Thread
0 = 1 7 13
1 = 2 8 14
2 = 3 9 15
------------------------
3 = 4 10 16
4 = 5 11 17
5 = 6 12 18
Man will vom Port 1 bis 18 scannen und möchte dazu 6 Threads benutzen.
In deiner Loop mit CreateThread() gehst du von I := 0 to
IP.NumThreads -1, wobei
IP.NumThreads := 6 ist. Um mit diesen 6 Threads bis Port 18 zu scannen muß jeder Thread 3 mal pingen. So wie oben in der Tabelle dargestellt. Nun kann das
OS nur 3 = DREI Threads erstellen, d.h. deine CreateThread() Schleife erzeugt Thread Nummer 0,1,2 schlägt aber fehl bei Thread Nummer 3,4,5. Deine while Schleife im Thread Code sieht so aus.
Delphi-Quellcode:
while (
IP.StartPort + i + Counter) <=
IP.EndPort
do
begin
// Scan ports ...
if ScanTCPPort(
IP.IP,
IP.StartPort + i + Counter, TCPsock)
then
PostMessage(hDlg, WM_ADDIP_TCPCONNPORT,
IP.IP,
IP.StartPort + i + Counter)
else
PostMessage(hDlg, WM_ADDIP_TCPPORT,
IP.IP,
IP.StartPort + i + Counter);
// Increase by number of threads
inc(Counter,
IP.Numthreads);
end;
Damit würde Thread 0 bei Port 19 terminieren, Thread 1 bei Port 20 und Thread 2 bei Port 21. Die Ports 4,5,6,10,11,12,16,17,18 würden aber nicht gescannt da Thread 3,4,5 überhaupt nicht durch das
OS erzeugt wurden.
So das nenne ich Lücken.
Wenn ich dennoch falsch liege dann kläre mich bitte auf, denn durch deinen Kommentar habe ich das Gefühl bekommmen das ich da was nicht schnalle.
Gruß Hagen