I'm afraid the question isn't related to the Go programming language at 
all.  It's related to the operating system you're running on - which as far 
as I can see, you haven't mentioned.  It's whatever the underlying system 
calls and TCP stack do.

On Tuesday, 22 June 2021 at 16:40:16 UTC+1 chanda...@gmail.com wrote:

> 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/bd58f8d1-d0b3-401c-b747-846b572a9e0an%40googlegroups.com.

Reply via email to