ing
This commit is contained in:
@@ -30,6 +30,7 @@ func Scan(discoverySession session.DiscoverySession, targetHost *omd.Host) error
|
||||
|
||||
lock := semaphore.NewWeighted(Ulimit())
|
||||
var wg sync.WaitGroup
|
||||
stopChan := make(chan struct{})
|
||||
timeout := 500 * time.Millisecond
|
||||
ports := make(map[int]*omd.Port)
|
||||
|
||||
@@ -52,7 +53,7 @@ Loop:
|
||||
wg.Done()
|
||||
}()
|
||||
|
||||
tryConnect(discoverySession, ports, targetHost, port, timeout)
|
||||
tryConnect(discoverySession, ports, targetHost, port, timeout, stopChan)
|
||||
}(portNumber)
|
||||
|
||||
timer := time.NewTimer(time.Microsecond * 100)
|
||||
@@ -60,6 +61,7 @@ Loop:
|
||||
select {
|
||||
case <-timer.C:
|
||||
case <-discoverySession.StopChan():
|
||||
close(stopChan)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
@@ -69,7 +71,7 @@ Loop:
|
||||
return nil
|
||||
}
|
||||
|
||||
func tryConnect(discoverySession session.DiscoverySession, ports map[int]*omd.Port, targetHost *omd.Host, port int, timeout time.Duration) {
|
||||
func tryConnect(discoverySession session.DiscoverySession, ports map[int]*omd.Port, targetHost *omd.Host, port int, timeout time.Duration, stopChan <-chan struct{}) {
|
||||
addr := net.JoinHostPort(targetHost.Address, strconv.Itoa(port))
|
||||
conn, err := net.DialTimeout("tcp", addr, timeout)
|
||||
dp := discoverySession.DiscoverPort()
|
||||
@@ -77,12 +79,12 @@ func tryConnect(discoverySession session.DiscoverySession, ports map[int]*omd.Po
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "too many open files") {
|
||||
select {
|
||||
case <-discoverySession.StopChan():
|
||||
case <-stopChan:
|
||||
return
|
||||
default:
|
||||
}
|
||||
time.Sleep(timeout)
|
||||
tryConnect(discoverySession, ports, targetHost, port, timeout)
|
||||
tryConnect(discoverySession, ports, targetHost, port, timeout, stopChan)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user