socket.go 900 B

12345678910111213141516171819202122232425262728293031323334353637
  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 netreflect implements run-time reflection for the
  5. // facilities of net package.
  6. package netreflect
  7. import (
  8. "errors"
  9. "net"
  10. )
  11. var (
  12. errInvalidType = errors.New("invalid type")
  13. errOpNoSupport = errors.New("operation not supported")
  14. )
  15. // SocketOf returns the socket descriptor of c.
  16. func SocketOf(c net.Conn) (uintptr, error) {
  17. switch c.(type) {
  18. case *net.TCPConn, *net.UDPConn, *net.IPConn, *net.UnixConn:
  19. return socketOf(c)
  20. default:
  21. return 0, errInvalidType
  22. }
  23. }
  24. // PacketSocketOf returns the socket descriptor of c.
  25. func PacketSocketOf(c net.PacketConn) (uintptr, error) {
  26. switch c.(type) {
  27. case *net.UDPConn, *net.IPConn, *net.UnixConn:
  28. return socketOf(c.(net.Conn))
  29. default:
  30. return 0, errInvalidType
  31. }
  32. }