package main
import(
"fmt"
"net"
"io"
"sync"
"time"
//"context"
)
func main(){
listener, err := net.Listen("tcp","0.0.0.0:5000")
if err != nil{
fmt.Println(err.Error())
return
}
defer listener.Close()
for{
conn,err := listener.Accept()
if err != nil{
fmt.Println(err.Error())
continue
}
conn.SetDeadline(time.Now().Add(time.Duration(10)*time.Second))
//conn.SetReadDeadline(time.Now().Add(time.Duration(10)*time.Second))
//conn.SetWriteDeadline(time.Now().Add(time.Duration(10)*time.Second))
go doServer(conn)
}
}
func doServer(conn net.Conn){
defer conn.Close()
//conn2,err := net.DialTimeout("tcp","0.0.0.0:6000",time.Duration(10)*time.Second)
conn2,err := net.Dial("tcp","0.0.0.0:6000")
if err != nil{
fmt.Println(err)
return
}
defer conn2.Close()
conn2.SetDeadline(time.Now().Add(time.Duration(10)*time.Second))
//conn2.SetReadDeadline(time.Now().Add(time.Duration(10)*time.Second))
//conn2.SetWriteDeadline(time.Now().Add(time.Duration(10)*time.Second))
wg := &sync.WaitGroup{}
wg.Add(2)
go func(){
_ ,err := io.Copy(conn2,conn)
if err != nil{
fmt.Println(err)
}
wg.Done()
}()
go func(){
_ ,err := io.Copy(conn,conn2)
if err != nil{
fmt.Println(err)
}
wg.Done()
}()
wg.Wait()
}