diff --git a/src/ClassiCube.vcxproj b/src/ClassiCube.vcxproj
index 0ab4d2c52..bd22d69a6 100644
--- a/src/ClassiCube.vcxproj
+++ b/src/ClassiCube.vcxproj
@@ -494,6 +494,7 @@
+
diff --git a/src/ClassiCube.vcxproj.filters b/src/ClassiCube.vcxproj.filters
index 8ce44dba7..d86d9b512 100644
--- a/src/ClassiCube.vcxproj.filters
+++ b/src/ClassiCube.vcxproj.filters
@@ -785,6 +785,9 @@
Source Files\2D
+
+ Source Files\Launcher
+
diff --git a/src/Http_Worker.c b/src/Http_Worker.c
index 817a01d87..0c2fe69f8 100644
--- a/src/Http_Worker.c
+++ b/src/Http_Worker.c
@@ -489,10 +489,13 @@ static cc_result HttpConnection_Open(struct HttpConnection* conn, const struct H
/* TODO: Connect in parallel instead of serial, but that's a lot of work */
for (i = 0; i < numValidAddrs; i++)
{
- res = Socket_Connect(&conn->socket, &addrs[i], false);
- if (!res) break;
+ res = Socket_Create(&conn->socket, &addrs[i], false);
+ if (res) { HttpConnection_Close(conn); continue; }
- HttpConnection_Close(conn);
+ res = Socket_Connect(conn->socket, &addrs[i]);
+ if (res) { HttpConnection_Close(conn); continue; }
+
+ break; /* Successful connection */
}
if (res) return res;
diff --git a/src/Platform.h b/src/Platform.h
index 746c75264..3ada2642f 100644
--- a/src/Platform.h
+++ b/src/Platform.h
@@ -273,8 +273,10 @@ cc_result Socket_CheckWritable(cc_socket s, cc_bool* writable);
/* Otherwise, attempts to resolve the input via DNS into one or more IP addresses */
cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* addrs, int* numValidAddrs);
-/* Allocates a new socket and then begins connecting to the given address */
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking);
+/* Allocates a new socket that is capable of connecting to the given address */
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking);
+/* Begins connecting to the given address */
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr);
/* Attempts to read data from the given socket */
/* NOTE: A closed socket may set modified to 0, but still return 'success' (i.e. 0) */
cc_result Socket_Read(cc_socket s, cc_uint8* data, cc_uint32 count, cc_uint32* modified);
diff --git a/src/Platform_3DS.c b/src/Platform_3DS.c
index f12373492..a62322246 100644
--- a/src/Platform_3DS.c
+++ b/src/Platform_3DS.c
@@ -309,19 +309,23 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return i == 0 ? ERR_INVALID_ARGUMENT : 0;
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct sockaddr* raw = (struct sockaddr*)addr->data;
- int res;
*s = socket(raw->sa_family, SOCK_STREAM, 0); // https://www.3dbrew.org/wiki/SOCU:socket
if (*s == -1) return errno;
-
+
if (nonblocking) {
int flags = fcntl(*s, F_GETFL, 0);
if (flags >= 0) fcntl(*s, F_SETFL, flags | O_NONBLOCK);
}
+ return 0;
+}
- res = connect(*s, raw, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct sockaddr* raw = (struct sockaddr*)addr->data;
+
+ int res = connect(s, raw, addr->size);
return res == -1 ? errno : 0;
}
diff --git a/src/Platform_Dreamcast.c b/src/Platform_Dreamcast.c
index f1d95fa4e..636cd7d17 100644
--- a/src/Platform_Dreamcast.c
+++ b/src/Platform_Dreamcast.c
@@ -452,9 +452,8 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return i == 0 ? ERR_INVALID_ARGUMENT : 0;
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct sockaddr* raw = (struct sockaddr*)addr->data;
- cc_result res;
*s = socket(raw->sa_family, SOCK_STREAM, IPPROTO_TCP);
if (*s == -1) return errno;
@@ -462,8 +461,13 @@ cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
if (nonblocking) {
fcntl(*s, F_SETFL, O_NONBLOCK);
}
+ return 0;
+}
- res = connect(*s, raw, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct sockaddr* raw = (struct sockaddr*)addr->data;
+
+ int res = connect(s, raw, addr->size);
return res == -1 ? errno : 0;
}
diff --git a/src/Platform_GCWii.c b/src/Platform_GCWii.c
index 450a5ffc1..21cdf3b47 100644
--- a/src/Platform_GCWii.c
+++ b/src/Platform_GCWii.c
@@ -417,9 +417,8 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return ParseHost(str, port, addrs, numValidAddrs);
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct sockaddr* raw = (struct sockaddr*)addr->data;
- int res;
*s = net_socket(raw->sa_family, SOCK_STREAM, 0);
if (*s < 0) return *s;
@@ -428,8 +427,13 @@ cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
int blocking_raw = -1; /* non-blocking mode */
net_ioctl(*s, FIONBIO, &blocking_raw);
}
+ return 0;
+}
- res = net_connect(*s, raw, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct sockaddr* raw = (struct sockaddr*)addr->data;
+
+ int res = net_connect(s, raw, addr->size);
return res < 0 ? res : 0;
}
diff --git a/src/Platform_MacClassic.c b/src/Platform_MacClassic.c
index ed8f698e2..7b418ff6a 100644
--- a/src/Platform_MacClassic.c
+++ b/src/Platform_MacClassic.c
@@ -391,7 +391,11 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return ERR_NOT_SUPPORTED;
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+ return ERR_NOT_SUPPORTED;
+}
+
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
return ERR_NOT_SUPPORTED;
}
diff --git a/src/Platform_N64.c b/src/Platform_N64.c
index 923ece947..3341ac563 100644
--- a/src/Platform_N64.c
+++ b/src/Platform_N64.c
@@ -215,7 +215,11 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return ERR_NOT_SUPPORTED;
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+ return ERR_NOT_SUPPORTED;
+}
+
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
return ERR_NOT_SUPPORTED;
}
diff --git a/src/Platform_NDS.c b/src/Platform_NDS.c
index 459ac94f8..7fbb189a2 100644
--- a/src/Platform_NDS.c
+++ b/src/Platform_NDS.c
@@ -359,9 +359,8 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return ParseHost(str, port, addrs, numValidAddrs);
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct sockaddr* raw = (struct sockaddr*)addr->data;
- int res;
if (!net_supported) { *s = -1; return ERR_NO_NETWORKING; }
*s = socket(raw->sa_family, SOCK_STREAM, 0);
@@ -371,8 +370,13 @@ cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
int blocking_raw = 1; /* non-blocking mode */
ioctl(*s, FIONBIO, &blocking_raw);
}
+ return 0;
+}
- res = connect(*s, raw, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct sockaddr* raw = (struct sockaddr*)addr->data;
+
+ int res = connect(s, raw, addr->size);
return res < 0 ? errno : 0;
}
diff --git a/src/Platform_PS1.c b/src/Platform_PS1.c
index b65d88c2d..ccc5028f0 100644
--- a/src/Platform_PS1.c
+++ b/src/Platform_PS1.c
@@ -198,7 +198,11 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return ERR_NOT_SUPPORTED;
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+ return ERR_NOT_SUPPORTED;
+}
+
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
return ERR_NOT_SUPPORTED;
}
diff --git a/src/Platform_PS2.c b/src/Platform_PS2.c
index 9723c6fd4..3491dae86 100644
--- a/src/Platform_PS2.c
+++ b/src/Platform_PS2.c
@@ -512,20 +512,24 @@ static cc_result GetSocketError(cc_socket s) {
return res;
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct sockaddr* raw = (struct sockaddr*)addr->data;
- int res;
*s = socket(raw->sa_family, SOCK_STREAM, 0);
if (*s < 0) return *s;
-
+
if (nonblocking) {
int blocking_raw = -1; // non-blocking mode
- //ioctlsocket(*s, FIONBIO, &blocking_raw); TODO doesn't work
+ //ioctlsocket(*s, FIONBIO, &blocking_raw); TODO doesn't work
}
+ return 0;
+}
- res = connect(*s, raw, addr->size);
- return res == -1 ? GetSocketError(*s) : 0;
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct sockaddr* raw = (struct sockaddr*)addr->data;
+
+ int res = connect(s, raw, addr->size);
+ return res == -1 ? GetSocketError(s) : 0;
}
cc_result Socket_Read(cc_socket s, cc_uint8* data, cc_uint32 count, cc_uint32* modified) {
diff --git a/src/Platform_PS3.c b/src/Platform_PS3.c
index e6261dc46..5d8d69ae4 100644
--- a/src/Platform_PS3.c
+++ b/src/Platform_PS3.c
@@ -374,20 +374,23 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return ParseHost(str, port, addrs, numValidAddrs);
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct sockaddr* raw = (struct sockaddr*)addr->data;
- int res;
- res = netSocket(raw->sa_family, SOCK_STREAM, IPPROTO_TCP);
- if (res < 0) return net_errno;
- *s = res;
+ *s = netSocket(raw->sa_family, SOCK_STREAM, IPPROTO_TCP);
+ if (*s < 0) return net_errno;
if (nonblocking) {
int on = 1;
netSetSockOpt(*s, SOL_SOCKET, SO_NBIO, &on, sizeof(int));
}
+ return 0;
+}
- res = netConnect(*s, raw, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct sockaddr* raw = (struct sockaddr*)addr->data;
+
+ int res = netConnect(s, raw, addr->size);
return res < 0 ? net_errno : 0;
}
diff --git a/src/Platform_PSP.c b/src/Platform_PSP.c
index e57fb401f..605113f38 100644
--- a/src/Platform_PSP.c
+++ b/src/Platform_PSP.c
@@ -311,19 +311,23 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return 0;
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct sockaddr* raw = (struct sockaddr*)addr->data;
- int res;
*s = sceNetInetSocket(raw->sa_family, SOCK_STREAM, IPPROTO_TCP);
if (*s < 0) return sceNetInetGetErrno();
-
+
if (nonblocking) {
int on = 1;
sceNetInetSetsockopt(*s, SOL_SOCKET, SO_NONBLOCK, &on, sizeof(int));
}
+ return 0;
+}
- res = sceNetInetConnect(*s, raw, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct sockaddr* raw = (struct sockaddr*)addr->data;
+
+ int res = sceNetInetConnect(*s, raw, addr->size);
return res < 0 ? sceNetInetGetErrno() : 0;
}
diff --git a/src/Platform_PSVita.c b/src/Platform_PSVita.c
index a1897d08d..6d4e72e8c 100644
--- a/src/Platform_PSVita.c
+++ b/src/Platform_PSVita.c
@@ -294,19 +294,23 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return 0;
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct SceNetSockaddr* raw = (struct SceNetSockaddr*)addr->data;
- int res;
*s = sceNetSocket("CC socket", raw->sa_family, SCE_NET_SOCK_STREAM, SCE_NET_IPPROTO_TCP);
if (*s < 0) return *s;
-
+
if (nonblocking) {
int on = 1;
sceNetSetsockopt(*s, SCE_NET_SOL_SOCKET, SCE_NET_SO_NBIO, &on, sizeof(int));
}
+ return 0;
+}
- res = sceNetConnect(*s, raw, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct SceNetSockaddr* raw = (struct SceNetSockaddr*)addr->data;
+
+ int res = sceNetConnect(s, raw, addr->size);
return res;
}
diff --git a/src/Platform_Posix.c b/src/Platform_Posix.c
index b442f7720..edc5b3662 100644
--- a/src/Platform_Posix.c
+++ b/src/Platform_Posix.c
@@ -642,7 +642,7 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return ParseHost(str, port, addrs, numValidAddrs);
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct sockaddr* raw = (struct sockaddr*)addr->data;
cc_result res;
@@ -653,8 +653,13 @@ cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
int blocking_raw = -1; /* non-blocking mode */
ioctl(*s, FIONBIO, &blocking_raw);
}
+ return 0;
+}
- res = connect(*s, raw, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct sockaddr* raw = (struct sockaddr*)addr->data;
+
+ int res = connect(s, raw, addr->size);
return res == -1 ? errno : 0;
}
diff --git a/src/Platform_Saturn.c b/src/Platform_Saturn.c
index d001cc548..1516c972d 100644
--- a/src/Platform_Saturn.c
+++ b/src/Platform_Saturn.c
@@ -193,7 +193,11 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return ERR_NOT_SUPPORTED;
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+ return ERR_NOT_SUPPORTED;
+}
+
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
return ERR_NOT_SUPPORTED;
}
diff --git a/src/Platform_Switch.c b/src/Platform_Switch.c
index 72cb5ad7d..82b8d4fb9 100644
--- a/src/Platform_Switch.c
+++ b/src/Platform_Switch.c
@@ -418,9 +418,8 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return ParseHost(str, port, addrs, numValidAddrs);
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct sockaddr* raw = (struct sockaddr*)addr->data;
- cc_result res;
*s = socket(raw->sa_family, SOCK_STREAM, IPPROTO_TCP);
if (*s == -1) return errno;
@@ -428,8 +427,13 @@ cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
if (nonblocking) {
fcntl(*s, F_SETFL, O_NONBLOCK);
}
+ return 0;
+}
- res = connect(*s, raw, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct sockaddr* raw = (struct sockaddr*)addr->data;
+
+ int res = connect(s, raw, addr->size);
return res == -1 ? errno : 0;
}
diff --git a/src/Platform_Web.c b/src/Platform_Web.c
index 3eee98ca0..4688b60fe 100644
--- a/src/Platform_Web.c
+++ b/src/Platform_Web.c
@@ -265,13 +265,16 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
extern int interop_SocketCreate(void);
extern int interop_SocketConnect(int sock, const cc_uint8* host, int port);
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
- int res;
- *s = interop_SocketCreate();
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+ *s = interop_SocketCreate();
+ return 0;
+}
+
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
/* size is used to store port number instead */
/* returned result is negative for error */
- res = -interop_SocketConnect(*s, addr->data, addr->size);
+ int res = -interop_SocketConnect(s, addr->data, addr->size);
/* error returned when invalid address provided */
if (res == _EHOSTUNREACH) return ERR_INVALID_ARGUMENT;
diff --git a/src/Platform_WiiU.c b/src/Platform_WiiU.c
index 6f4e65e39..27759801b 100644
--- a/src/Platform_WiiU.c
+++ b/src/Platform_WiiU.c
@@ -355,9 +355,8 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return ParseHost(str, port, addrs, numValidAddrs);
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct sockaddr* raw = (struct sockaddr*)addr->data;
- cc_result res;
*s = socket(raw->sa_family, SOCK_STREAM, IPPROTO_TCP);
if (*s == -1) return errno;
@@ -366,8 +365,13 @@ cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
int blocking_raw = -1; /* non-blocking mode */
ioctl(*s, FIONBIO, &blocking_raw);
}
+ return 0;
+}
- res = connect(*s, raw, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct sockaddr* raw = (struct sockaddr*)addr->data;
+
+ int res = connect(s, raw, addr->size);
return res == -1 ? errno : 0;
}
diff --git a/src/Platform_Windows.c b/src/Platform_Windows.c
index 5d3b556d4..0bce43a7c 100644
--- a/src/Platform_Windows.c
+++ b/src/Platform_Windows.c
@@ -607,7 +607,7 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
}
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
SOCKADDR* raw_addr = (SOCKADDR*)addr->data;
cc_result res;
@@ -618,8 +618,13 @@ cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
u_long blockingMode = -1; /* non-blocking mode */
_ioctlsocket(*s, FIONBIO, &blockingMode);
}
+ return 0;
+}
- res = _connect(*s, raw_addr, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ SOCKADDR* raw_addr = (SOCKADDR*)addr->data;
+
+ int res = _connect(s, raw_addr, addr->size);
return res == -1 ? _WSAGetLastError() : 0;
}
diff --git a/src/Platform_Xbox.c b/src/Platform_Xbox.c
index aead23901..9066427f1 100644
--- a/src/Platform_Xbox.c
+++ b/src/Platform_Xbox.c
@@ -336,9 +336,8 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return i == 0 ? ERR_INVALID_ARGUMENT : 0;
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
struct sockaddr* raw = (struct sockaddr*)addr->data;
- int res;
*s = lwip_socket(raw->sa_family, SOCK_STREAM, 0);
if (*s == -1) return errno;
@@ -347,8 +346,13 @@ cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
int blocking_raw = -1; /* non-blocking mode */
lwip_ioctl(*s, FIONBIO, &blocking_raw);
}
+ return 0;
+}
- res = lwip_connect(*s, raw, addr->size);
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
+ struct sockaddr* raw = (struct sockaddr*)addr->data;
+
+ int res = lwip_connect(s, raw, addr->size);
return res == -1 ? errno : 0;
}
diff --git a/src/Platform_Xbox360.c b/src/Platform_Xbox360.c
index 2d908dc94..bac9afe1f 100644
--- a/src/Platform_Xbox360.c
+++ b/src/Platform_Xbox360.c
@@ -232,7 +232,11 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a
return ERR_NOT_SUPPORTED;
}
-cc_result Socket_Connect(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
+ return ERR_NOT_SUPPORTED;
+}
+
+cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
return ERR_NOT_SUPPORTED;
}
diff --git a/src/Server.c b/src/Server.c
index 27a8383a6..212727714 100644
--- a/src/Server.c
+++ b/src/Server.c
@@ -315,10 +315,11 @@ static void MPConnection_BeginConnect(void) {
MPConnection_FailConnect(res); return;
}
- res = Socket_Connect(&net_socket, &addrs[0], true);
- if (res == ERR_INVALID_ARGUMENT) {
- MPConnection_Fail(&invalid_reason);
- } else if (res && res != ReturnCode_SocketInProgess && res != ReturnCode_SocketWouldBlock) {
+ res = Socket_Create(&net_socket, &addrs[0], true);
+ if (res) { MPConnection_FailConnect(res); return; }
+ res = Socket_Connect(net_socket, &addrs[0]);
+
+ if (res && res != ReturnCode_SocketInProgess && res != ReturnCode_SocketWouldBlock) {
MPConnection_FailConnect(res);
} else {
Server.Disconnected = false;