Written one TCP client which is used to create 10 TCP concurrent 
connections(holding for logger time) and enable only 10 ephemeral ports to 
use(49001 - 49010 ip_local_port_range file).

func createConnection(c int, desAddr, desPort string) (brokerCon net.Conn, 
err error) {
    localips := GetLocalIP()
    maxRetry := len(localips)
    retry := 0
    for retry < maxRetry {
        lIPPort := fmt.Sprintf("%s:0", 
strings.Split(localips[retry].String(), "/")[0])
        fmt.Println("\n---", lIPPort)
        laddr, lerr := net.ResolveTCPAddr("tcp4", lIPPort)
        if lerr != nil {
            fmt.Println("Getting Error ResolveTCPAddr for local ", lerr)
        }
        raddr, rerr := net.ResolveTCPAddr("tcp4", desAddr+desPort)
        if rerr != nil {
            fmt.Println("Getting Error ResolveTCPAddr for local ", rerr)
        }

        brokerCon, err = net.DialTCP("tcp", laddr, raddr)
        if err != nil {
            fmt.Printf("Failed to connect connetion %d , %d retrying with 
seconday IP, err:\n",
                c, retry, err)
            retry = retry + 1
            time.Sleep(1 * time.Second)
            continue

        } else {
            //fmt.Println("successfull ")
            break
        }
    }
    return
}


*Scenario 1:*

It's able to create 10 connections if the laddr value is *nil* on the 
DialTCP method. DialTCP is able to use 49009 and 49007 port which is 
already used by some different destination(as because A TCP connection is 
determined by a 5-tuple: *[local IP, local port, remote IP, remote port, 
protocol]* )

sudo netstat -anpl --tcp --udp | grep 490 

tcp        0      0 10.50.1.245:49005       10.50.1.41:9999        
 ESTABLISHED 23408/client        

tcp        0      0 10.50.1.245:49010       10.50.1.41:9999        
 ESTABLISHED 23408/client        

tcp        0      0 10.50.1.245:49008       10.50.1.41:9999        
 ESTABLISHED 23408/client        

tcp        0      0 10.50.1.245:49009       XXX.XXX.XXX.X44:443    
 ESTABLISHED 3250/XXXX          

tcp        0      0 10.50.1.245:49006       10.50.1.41:9999        
 ESTABLISHED 23408/client        

tcp        0      0 10.50.1.245:49002       10.50.1.41:9999        
 ESTABLISHED 23408/client        

tcp        0      0 10.50.1.245:49004       10.50.1.41:9999        
 ESTABLISHED 23408/client        

tcp        0      0 10.50.1.245:49001       10.50.1.41:9999        
 ESTABLISHED 23408/client        

tcp        0      0 10.50.1.245:49007       10.50.1.41:9999        
 ESTABLISHED 23408/client        

tcp        0      0 10.50.1.245:49003       10.50.1.41:9999        
 ESTABLISHED 23408/client        

tcp        0      0 10.50.1.245:49007       XXX.XXX.XXX.X29:443        
ESTABLISHED 2806/XXXX 

tcp        0      0 10.50.1.245:49009       10.50.1.41:9999        
 ESTABLISHED 23408/client  

*Scenario 2:*

If I Pass local IP details(10.50.1.245) with 0 port, it's able to create 
only 8 connections and throwing *bind: address already in use* for the 
remaining 2 connections. if the local address is not nil why dialTCP is not 
able to use 49005 and 49007 port which is already used by some different 
destination.

sudo netstat -anpl --tcp --udp | grep 490 

tcp        0      0 10.50.1.245:49010       10.50.1.41:9999        
 ESTABLISHED 25841/client        

tcp        0      0 10.50.1.245:49005       XXX.XXX.XXX.X66:443        
ESTABLISHED 2510/XXX 

tcp        0      0 10.50.1.245:49008       10.50.1.41:9999        
 ESTABLISHED 25841/client        

tcp        0      0 10.50.1.245:49005       XXX.XXX.XXX.X44:443    
 ESTABLISHED 3250/XXX         

tcp        0      0 10.50.1.245:49006       10.50.1.41:9999        
 ESTABLISHED 25841/client        

tcp        0      0 10.50.1.245:49002       10.50.1.41:9999        
 ESTABLISHED 25841/client        

tcp        0      0 10.50.1.245:49004       10.50.1.41:9999        
 ESTABLISHED 25841/client        

tcp        0      0 10.50.1.245:49001       10.50.1.41:9999        
 ESTABLISHED 25841/client        

tcp        0      0 10.50.1.245:49003       10.50.1.41:9999        
 ESTABLISHED 25841/client        

tcp        0      0 10.50.1.245:49007       XXX.XXX.XXX.X29:443        
ESTABLISHED 2806/XXX 

tcp        0      0 10.50.1.245:49009       10.50.1.41:9999        
 ESTABLISHED 25841/client 


-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/c323ebfa-9aff-4257-afc9-085fad111c18n%40googlegroups.com.

Reply via email to