@@ -59,28 +59,27 @@ func (c *Conn) isLinuxUnprivileged() bool {
5959func (c * Conn ) ReadIP (buffer * buf.Buffer ) error {
6060 if c .destination .Is6 () || c .isLinuxUnprivileged () {
6161 var readMsg func (b , oob []byte ) (n , oobn int , addr netip.Addr , err error )
62- switch conn := c .conn .(type ) {
63- case * net.IPConn :
62+ if ipConn , isIPConn := common.Cast [* net.IPConn ](c .conn ); isIPConn {
6463 readMsg = func (b , oob []byte ) (n , oobn int , addr netip.Addr , err error ) {
6564 var ipAddr * net.IPAddr
66- n , oobn , _ , ipAddr , err = conn .ReadMsgIP (b , oob )
65+ n , oobn , _ , ipAddr , err = ipConn .ReadMsgIP (b , oob )
6766 if err == nil {
6867 addr = M .AddrFromNet (ipAddr )
6968 }
7069 return
7170 }
72- case * net.UDPConn :
71+ } else if udpConn , isUDPConn := common. Cast [ * net.UDPConn ]( c . conn ); isUDPConn {
7372 readMsg = func (b , oob []byte ) (n , oobn int , addr netip.Addr , err error ) {
7473 var addrPort netip.AddrPort
75- n , oobn , _ , addrPort , err = conn .ReadMsgUDPAddrPort (b , oob )
74+ n , oobn , _ , addrPort , err = udpConn .ReadMsgUDPAddrPort (b , oob )
7675 if err == nil {
7776 addr = addrPort .Addr ()
7877 }
7978 return
8079 }
81- case * UnprivilegedConn :
82- readMsg = conn .ReadMsg
83- default :
80+ } else if unprivilegedConn , isUnprivilegedConn := c . conn .( * UnprivilegedConn ); isUnprivilegedConn {
81+ readMsg = unprivilegedConn .ReadMsg
82+ } else {
8483 return E .New ("unsupported conn type: " , reflect .TypeOf (c .conn ))
8584 }
8685 if ! c .destination .Is6 () {
0 commit comments