| 123456789101112131415161718192021222324252627 | 
							- package internal
 
- import (
 
- 	"net"
 
- 	"reflect"
 
- 	"v2ray.com/core/common/errors"
 
- )
 
- var (
 
- 	errInvalidConn = errors.New("Invalid Connection.")
 
- )
 
- // GetSysFd returns the underlying fd of a connection.
 
- func GetSysFd(conn net.Conn) (int, error) {
 
- 	cv := reflect.ValueOf(conn)
 
- 	switch ce := cv.Elem(); ce.Kind() {
 
- 	case reflect.Struct:
 
- 		netfd := ce.FieldByName("conn").FieldByName("fd")
 
- 		switch fe := netfd.Elem(); fe.Kind() {
 
- 		case reflect.Struct:
 
- 			fd := fe.FieldByName("sysfd")
 
- 			return int(fd.Int()), nil
 
- 		}
 
- 	}
 
- 	return 0, errInvalidConn
 
- }
 
 
  |