sysfd.go 464 B

12345678910111213141516171819202122232425
  1. package internal
  2. import (
  3. "errors"
  4. "net"
  5. "reflect"
  6. )
  7. var (
  8. ErrInvalidConn = errors.New("Invalid Connection.")
  9. )
  10. func GetSysFd(conn net.Conn) (int, error) {
  11. cv := reflect.ValueOf(conn)
  12. switch ce := cv.Elem(); ce.Kind() {
  13. case reflect.Struct:
  14. netfd := ce.FieldByName("conn").FieldByName("fd")
  15. switch fe := netfd.Elem(); fe.Kind() {
  16. case reflect.Struct:
  17. fd := fe.FieldByName("sysfd")
  18. return int(fd.Int()), nil
  19. }
  20. }
  21. return 0, ErrInvalidConn
  22. }