瀏覽代碼

Merge pull request #33070 from Faless/net/fix_connect

Use WSAConnect instead of connect on Windows.
Rémi Verschelde 5 年之前
父節點
當前提交
dac22c4b13
共有 1 個文件被更改,包括 5 次插入1 次删除
  1. 5 1
      drivers/unix/net_socket_posix.cpp

+ 5 - 1
drivers/unix/net_socket_posix.cpp

@@ -70,6 +70,7 @@
 #define SOCK_CBUF(x) x
 #define SOCK_IOCTL ioctl
 #define SOCK_CLOSE ::close
+#define SOCK_CONNECT(p_sock, p_addr, p_addr_len) ::connect(p_sock, p_addr, p_addr_len)
 
 /* Windows */
 #elif defined(WINDOWS_ENABLED)
@@ -83,6 +84,9 @@
 #define SOCK_CBUF(x) (const char *)(x)
 #define SOCK_IOCTL ioctlsocket
 #define SOCK_CLOSE closesocket
+// connect is broken on windows under certain conditions, reasons unknown:
+// See https://github.com/godotengine/webrtc-native/issues/6
+#define SOCK_CONNECT(p_sock, p_addr, p_addr_len) ::WSAConnect(p_sock, p_addr, p_addr_len, NULL, NULL, NULL, NULL)
 
 // Workaround missing flag in MinGW
 #if defined(__MINGW32__) && !defined(SIO_UDP_NETRESET)
@@ -409,7 +413,7 @@ Error NetSocketPosix::connect_to_host(IP_Address p_host, uint16_t p_port) {
 	struct sockaddr_storage addr;
 	size_t addr_size = _set_addr_storage(&addr, p_host, p_port, _ip_type);
 
-	if (::connect(_sock, (struct sockaddr *)&addr, addr_size) != 0) {
+	if (SOCK_CONNECT(_sock, (struct sockaddr *)&addr, addr_size) != 0) {
 
 		NetError err = _get_socket_error();