package goupnp
import (
"io"
"net"
"github.com/huin/goupnp/httpu"
)
func httpuClient() (httpu .ClientInterfaceCtx , func (), error ) {
addrs , err := localIPv4MCastAddrs ()
if err != nil {
return nil , nil , ctxError (err , "requesting host IPv4 addresses" )
}
closers := make ([]io .Closer , 0 , len (addrs ))
delegates := make ([]httpu .ClientInterfaceCtx , 0 , len (addrs ))
for _ , addr := range addrs {
c , err := httpu .NewHTTPUClientAddr (addr )
if err != nil {
return nil , nil , ctxErrorf (err ,
"creating HTTPU client for address %s" , addr )
}
closers = append (closers , c )
delegates = append (delegates , c )
}
closer := func () {
for _ , c := range closers {
c .Close ()
}
}
return httpu .NewMultiClientCtx (delegates ), closer , nil
}
func localIPv4MCastAddrs() ([]string , error ) {
ifaces , err := net .Interfaces ()
if err != nil {
return nil , ctxError (err , "requesting host interfaces" )
}
var addrs []string
for _ , iface := range ifaces {
if iface .Flags &net .FlagMulticast == 0 || iface .Flags &net .FlagLoopback != 0 || iface .Flags &net .FlagUp == 0 {
continue
}
ifaceAddrs , err := iface .Addrs ()
if err != nil {
return nil , ctxErrorf (err ,
"finding addresses on interface %s" , iface .Name )
}
for _ , netAddr := range ifaceAddrs {
addr , ok := netAddr .(*net .IPNet )
if !ok {
continue
}
if addr .IP .To4 () == nil {
continue
}
addrs = append (addrs , addr .IP .String ())
}
}
return addrs , nil
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .