Browse Source

fix win test error; dont use ReadV on file

vcptr 6 years ago
parent
commit
47660bfee2
3 changed files with 4 additions and 54 deletions
  1. 4 8
      common/buf/io.go
  2. 0 9
      common/buf/readv_constraint_other.go
  3. 0 37
      common/buf/readv_constraint_windows.go

+ 4 - 8
common/buf/io.go

@@ -3,6 +3,7 @@ package buf
 import (
 import (
 	"io"
 	"io"
 	"net"
 	"net"
+	"os"
 	"syscall"
 	"syscall"
 	"time"
 	"time"
 )
 )
@@ -57,19 +58,14 @@ func NewReader(reader io.Reader) Reader {
 		}
 		}
 	}
 	}
 
 
-	if useReadv {
+	_, isFile := reader.(*os.File)
+	if !isFile && useReadv {
 		if sc, ok := reader.(syscall.Conn); ok {
 		if sc, ok := reader.(syscall.Conn); ok {
 			rawConn, err := sc.SyscallConn()
 			rawConn, err := sc.SyscallConn()
 			if err != nil {
 			if err != nil {
 				newError("failed to get sysconn").Base(err).WriteToLog()
 				newError("failed to get sysconn").Base(err).WriteToLog()
 			} else {
 			} else {
-				/*
-					Check if ReadVReader Can be used on this reader first
-					Fix https://github.com/v2ray/v2ray-core/issues/1666
-				*/
-				if ok, _ := checkReadVConstraint(rawConn); ok {
-					return NewReadVReader(reader, rawConn)
-				}
+				return NewReadVReader(reader, rawConn)
 			}
 			}
 		}
 		}
 	}
 	}

+ 0 - 9
common/buf/readv_constraint_other.go

@@ -1,9 +0,0 @@
-// +build !windows
-
-package buf
-
-import "syscall"
-
-func checkReadVConstraint(conn syscall.RawConn) (bool, error) {
-	return true, nil
-}

+ 0 - 37
common/buf/readv_constraint_windows.go

@@ -1,37 +0,0 @@
-// +build windows
-package buf
-
-import (
-	"syscall"
-)
-
-func checkReadVConstraint(conn syscall.RawConn) (bool, error) {
-	var isSocketReady = false
-	var reason error
-	/*
-		In Windows, WSARecv system call only support socket connection.
-
-		It it required to check if the given fd is of a socket type
-
-		Fix https://github.com/v2ray/v2ray-core/issues/1666
-
-		Additional Information:
-		https://docs.microsoft.com/en-us/windows/desktop/api/winsock2/nf-winsock2-wsarecv
-		https://docs.microsoft.com/en-us/windows/desktop/api/winsock/nf-winsock-getsockopt
-		https://docs.microsoft.com/en-us/windows/desktop/WinSock/sol-socket-socket-options
-
-	*/
-	err := conn.Control(func(fd uintptr) {
-		var val [4]byte
-		var le = int32(len(val))
-		err := syscall.Getsockopt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_RCVBUF, &val[0], &le)
-		if err != nil {
-			isSocketReady = false
-		} else {
-			isSocketReady = true
-		}
-		reason = err
-	})
-
-	return isSocketReady, err
-}