udpsock_plan9_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright 2016 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package net
  5. import (
  6. "internal/testenv"
  7. "runtime"
  8. "testing"
  9. )
  10. func TestListenMulticastUDP(t *testing.T) {
  11. testenv.MustHaveExternalNetwork(t)
  12. ifcs, err := Interfaces()
  13. if err != nil {
  14. t.Skip(err.Error())
  15. }
  16. if len(ifcs) == 0 {
  17. t.Skip("no network interfaces found")
  18. }
  19. var mifc *Interface
  20. for _, ifc := range ifcs {
  21. if ifc.Flags&FlagUp|FlagMulticast != FlagUp|FlagMulticast {
  22. continue
  23. }
  24. mifc = &ifc
  25. break
  26. }
  27. if mifc == nil {
  28. t.Skipf("no multicast interfaces found")
  29. }
  30. c1, err := ListenMulticastUDP("udp4", mifc, &UDPAddr{IP: ParseIP("224.0.0.254")})
  31. if err != nil {
  32. t.Fatalf("multicast not working on %s: %v", runtime.GOOS, err)
  33. }
  34. c1addr := c1.LocalAddr().(*UDPAddr)
  35. if err != nil {
  36. t.Fatal(err)
  37. }
  38. defer c1.Close()
  39. c2, err := ListenUDP("udp4", &UDPAddr{IP: IPv4zero, Port: 0})
  40. c2addr := c2.LocalAddr().(*UDPAddr)
  41. if err != nil {
  42. t.Fatal(err)
  43. }
  44. defer c2.Close()
  45. n, err := c2.WriteToUDP([]byte("data"), c1addr)
  46. if err != nil {
  47. t.Fatal(err)
  48. }
  49. if n != 4 {
  50. t.Fatalf("got %d; want 4", n)
  51. }
  52. n, err = c1.WriteToUDP([]byte("data"), c2addr)
  53. if err != nil {
  54. t.Fatal(err)
  55. }
  56. if n != 4 {
  57. t.Fatalf("got %d; want 4", n)
  58. }
  59. }