This commit is contained in:
crusader
2018-09-03 23:14:51 +09:00
parent f5af8e1473
commit c527a84bb2
4 changed files with 36 additions and 13 deletions

View File

@@ -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
}