Przeglądaj źródła

Properly initialize Winsock on startup

Also fix typo in _get_last_error which caused Winsock connect to fail.
Fabio Alessandrelli 7 lat temu
rodzic
commit
01c3c1a07b

+ 18 - 1
drivers/unix/net_socket_posix.cpp

@@ -150,9 +150,24 @@ NetSocket *NetSocketPosix::_create_func() {
 }
 
 void NetSocketPosix::make_default() {
+#if defined(WINDOWS_ENABLED)
+	if (_create == NULL) {
+		WSADATA data;
+		WSAStartup(MAKEWORD(2, 2), &data);
+	}
+#endif
 	_create = _create_func;
 }
 
+void NetSocketPosix::cleanup() {
+#if defined(WINDOWS_ENABLED)
+	if (_create != NULL) {
+		WSACleanup();
+	}
+	_create = NULL;
+#endif
+}
+
 NetSocketPosix::NetSocketPosix() {
 	_sock = SOCK_EMPTY;
 	_ip_type = IP::TYPE_NONE;
@@ -169,10 +184,11 @@ NetSocketPosix::NetError NetSocketPosix::_get_socket_error() {
 
 	if (err == WSAEISCONN)
 		return ERR_NET_IS_CONNECTED;
-	if (err == WSAEINPROGRESS || errno == WSAEALREADY)
+	if (err == WSAEINPROGRESS || err == WSAEALREADY)
 		return ERR_NET_IN_PROGRESS;
 	if (err == WSAEWOULDBLOCK)
 		return ERR_NET_WOULD_BLOCK;
+	ERR_PRINTS("Socket error: " + itos(err));
 	return ERR_NET_OTHER;
 #else
 	if (errno == EISCONN)
@@ -181,6 +197,7 @@ NetSocketPosix::NetError NetSocketPosix::_get_socket_error() {
 		return ERR_NET_IN_PROGRESS;
 	if (errno == EAGAIN || errno == EWOULDBLOCK)
 		return ERR_NET_WOULD_BLOCK;
+	ERR_PRINTS("Socket error: " + itos(errno));
 	return ERR_NET_OTHER;
 #endif
 }

+ 1 - 0
drivers/unix/net_socket_posix.h

@@ -67,6 +67,7 @@ protected:
 
 public:
 	static void make_default();
+	static void cleanup();
 
 	virtual Error open(Type p_sock_type, IP::Type &ip_type);
 	virtual void close();

+ 2 - 0
drivers/unix/os_unix.cpp

@@ -139,6 +139,8 @@ void OS_Unix::initialize_core() {
 }
 
 void OS_Unix::finalize_core() {
+
+	NetSocketPosix::cleanup();
 }
 
 void OS_Unix::alert(const String &p_alert, const String &p_title) {

+ 2 - 0
platform/uwp/os_uwp.cpp

@@ -406,6 +406,8 @@ void OSUWP::finalize() {
 }
 
 void OSUWP::finalize_core() {
+
+	NetSocketPosix::cleanup();
 }
 
 void OSUWP::alert(const String &p_alert, const String &p_title) {

+ 1 - 0
platform/windows/os_windows.cpp

@@ -1512,6 +1512,7 @@ void OS_Windows::finalize_core() {
 	timeEndPeriod(1);
 
 	memdelete(process_map);
+	NetSocketPosix::cleanup();
 }
 
 void OS_Windows::alert(const String &p_alert, const String &p_title) {