diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2018-09-13 15:47:00 +0200 |
---|---|---|
committer | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2018-09-13 16:05:47 +0200 |
commit | 01c3c1a07bfbaf6df8b1154e5ef31ecc890b03a3 (patch) | |
tree | af355216c986b4db161278f822e9da264f53859c /drivers/unix/net_socket_posix.cpp | |
parent | 9b31d2da1c20807928ac2aea41a187184f9ee051 (diff) | |
download | redot-engine-01c3c1a07bfbaf6df8b1154e5ef31ecc890b03a3.tar.gz |
Properly initialize Winsock on startup
Also fix typo in _get_last_error which caused Winsock connect to fail.
Diffstat (limited to 'drivers/unix/net_socket_posix.cpp')
-rw-r--r-- | drivers/unix/net_socket_posix.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/unix/net_socket_posix.cpp b/drivers/unix/net_socket_posix.cpp index ea19b6a700..9dcc6038ab 100644 --- a/drivers/unix/net_socket_posix.cpp +++ b/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 } |