Mercurial > mercurial > hgweb_golang.cgi
view src/ut/nw/nw.go @ 42:c58172a59534
bug fix.
author | pyon@macmini |
---|---|
date | Tue, 10 Mar 2020 21:12:29 +0900 |
parents | 5345d67aea5a |
children |
line wrap: on
line source
/* little network library. */ package nw import ( "io" "log" "net" "os" ) /* nc: done. */ func Netcat( server, port string ) { conn, err := net.Dial( "tcp", net.JoinHostPort( server, port ) ) if err != nil { log.Fatal( err ) } defer conn.Close() go mustCopy( os.Stdout, conn ) mustCopy( conn, os.Stdin ) } func mustCopy( dst io.Writer, src io.Reader ) { if _, err := io.Copy( dst, src ); err != nil { log.Fatal( err ) } } /* nc -l: done. */ func Netcat_l( port string ) { addr := GetLocalIP() l, err := net.Listen( "tcp", net.JoinHostPort( addr, port ) ) if err != nil { log.Fatal( err ) } defer l.Close() conn, err := l.Accept() if err != nil { log.Fatal( err ) } io.Copy( os.Stdout, conn ) conn.Close() } /* done. */ func GetLocalIP() string { addrs, err := net.InterfaceAddrs() if err != nil { log.Fatal( err ) } for _, addr := range addrs { if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { if ipnet.IP.To4() != nil { return ipnet.IP.String() } } } return "127.0.0.1" }