mirror of https://github.com/coder/coder.git
51 lines
840 B
Go
51 lines
840 B
Go
package main
|
|
|
|
// A simple echo server. It listens on a random port, prints that port, then
|
|
// echos back anything sent to it.
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"net"
|
|
)
|
|
|
|
func main() {
|
|
l, err := net.Listen("tcp", "127.0.0.1:0")
|
|
if err != nil {
|
|
log.Fatalf("listen error: err=%s", err)
|
|
}
|
|
|
|
defer l.Close()
|
|
tcpAddr, valid := l.Addr().(*net.TCPAddr)
|
|
if !valid {
|
|
log.Fatal("address is not valid")
|
|
}
|
|
|
|
remotePort := tcpAddr.Port
|
|
_, err = fmt.Println(remotePort)
|
|
if err != nil {
|
|
log.Fatalf("print error: err=%s", err)
|
|
}
|
|
|
|
for {
|
|
conn, err := l.Accept()
|
|
if err != nil {
|
|
log.Fatalf("accept error, err=%s", err)
|
|
return
|
|
}
|
|
|
|
go func() {
|
|
defer conn.Close()
|
|
_, err := io.Copy(conn, conn)
|
|
|
|
if errors.Is(err, io.EOF) {
|
|
return
|
|
} else if err != nil {
|
|
log.Fatalf("copy error, err=%s", err)
|
|
}
|
|
}()
|
|
}
|
|
}
|