func TestConnUnicastSocketOptions(t *testing.T) { switch runtime.GOOS { case "nacl", "plan9": t.Skipf("not supported on %s", runtime.GOOS) } ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) if ifi == nil { t.Skipf("not available on %s", runtime.GOOS) } ln, err := net.Listen("tcp4", "127.0.0.1:0") if err != nil { t.Fatal(err) } defer ln.Close() done := make(chan bool) go acceptor(t, ln, done) c, err := net.Dial("tcp4", ln.Addr().String()) if err != nil { t.Fatal(err) } defer c.Close() testUnicastSocketOptions(t, ipv4.NewConn(c)) <-done }
func ExampleConn_markingTCP() { ln, err := net.Listen("tcp4", "0.0.0.0:1024") if err != nil { log.Fatal(err) } defer ln.Close() for { c, err := ln.Accept() if err != nil { log.Fatal(err) } go func(c net.Conn) { defer c.Close() p := ipv4.NewConn(c) if err := p.SetTOS(iana.DiffServAF11); err != nil { log.Fatal(err) } if err := p.SetTTL(128); err != nil { log.Fatal(err) } if _, err := c.Write([]byte("HELLO-R-U-THERE-ACK")); err != nil { log.Fatal(err) } }(c) } }
func ExampleConn_markingTCP() { ln, err := net.Listen("tcp", "0.0.0.0:1024") if err != nil { log.Fatal(err) } defer ln.Close() for { c, err := ln.Accept() if err != nil { log.Fatal(err) } go func(c net.Conn) { defer c.Close() if c.RemoteAddr().(*net.TCPAddr).IP.To4() != nil { p := ipv4.NewConn(c) if err := p.SetTOS(0x28); err != nil { // DSCP AF11 log.Fatal(err) } if err := p.SetTTL(128); err != nil { log.Fatal(err) } } if _, err := c.Write([]byte("HELLO-R-U-THERE-ACK")); err != nil { log.Fatal(err) } }(c) } }
func SetTrafficClass(conn net.Conn, class int) error { switch conn := conn.(type) { case *net.TCPConn: e1 := ipv4.NewConn(conn).SetTOS(class) e2 := ipv6.NewConn(conn).SetTrafficClass(class) if e1 != nil { return e1 } return e2 case dialerConn: return SetTrafficClass(conn.Conn, class) default: return fmt.Errorf("unknown connection type %T", conn) } }
// ListenOnTransports listens for incoming RTP and RTCP packets addressed // to this transport. // func (tp *TransportUDP) ListenOnTransports() (err error) { tp.dataConn, err = net.ListenUDP(tp.localAddrRtp.Network(), tp.localAddrRtp) if err != nil { return } p := ipv4.NewConn(tp.dataConn) if err = p.SetTOS(iana.DiffServAF41); err != nil { fmt.Printf("TransportUDP: failed to set TOS marking on dataConn\n") } tp.ctrlConn, err = net.ListenUDP(tp.localAddrRtcp.Network(), tp.localAddrRtcp) if err != nil { tp.dataConn.Close() tp.dataConn = nil return } go tp.readDataPacket() go tp.readCtrlPacket() return nil }
func TestConnUnicastSocketOptions(t *testing.T) { switch runtime.GOOS { case "nacl", "plan9", "windows": t.Skipf("not supported on %s", runtime.GOOS) } ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) if ifi == nil { t.Skipf("not available on %s", runtime.GOOS) } ln, err := net.Listen("tcp4", "127.0.0.1:0") if err != nil { t.Fatal(err) } defer ln.Close() errc := make(chan error, 1) go func() { c, err := ln.Accept() if err != nil { errc <- err return } errc <- c.Close() }() c, err := net.Dial("tcp4", ln.Addr().String()) if err != nil { t.Fatal(err) } defer c.Close() testUnicastSocketOptions(t, ipv4.NewConn(c)) if err := <-errc; err != nil { t.Errorf("server: %v", err) } }