Adding a macro on NetSocketPosix to pick the right type for FIONREAD len

On Windows, `ioctlsocket` returns `len` as an unsigned long.
On Posix, `ioctl` returns `len` as an int.
This aims to fix #41287 bug, which was seen on Linux.
The implementation is just a new macro that is set with the proper type
for each platform.
This commit is contained in:
Pablo Andres Fuente 2024-09-16 23:38:32 -03:00 committed by Rémi Verschelde
parent 02b16d2f54
commit 84e24017b0
No known key found for this signature in database
GPG Key ID: C3336907360768E1
1 changed files with 3 additions and 1 deletions

View File

@ -67,6 +67,7 @@
#define SOCK_BUF(x) x #define SOCK_BUF(x) x
#define SOCK_CBUF(x) x #define SOCK_CBUF(x) x
#define SOCK_IOCTL ioctl #define SOCK_IOCTL ioctl
#define SOCK_FIONREAD_LEN_TYPE int
#define SOCK_CLOSE ::close #define SOCK_CLOSE ::close
#define SOCK_CONNECT(p_sock, p_addr, p_addr_len) ::connect(p_sock, p_addr, p_addr_len) #define SOCK_CONNECT(p_sock, p_addr, p_addr_len) ::connect(p_sock, p_addr, p_addr_len)
@ -81,6 +82,7 @@
#define SOCK_BUF(x) (char *)(x) #define SOCK_BUF(x) (char *)(x)
#define SOCK_CBUF(x) (const char *)(x) #define SOCK_CBUF(x) (const char *)(x)
#define SOCK_IOCTL ioctlsocket #define SOCK_IOCTL ioctlsocket
#define SOCK_FIONREAD_LEN_TYPE unsigned long
#define SOCK_CLOSE closesocket #define SOCK_CLOSE closesocket
// connect is broken on windows under certain conditions, reasons unknown: // connect is broken on windows under certain conditions, reasons unknown:
// See https://github.com/godotengine/webrtc-native/issues/6 // See https://github.com/godotengine/webrtc-native/issues/6
@ -742,7 +744,7 @@ bool NetSocketPosix::is_open() const {
int NetSocketPosix::get_available_bytes() const { int NetSocketPosix::get_available_bytes() const {
ERR_FAIL_COND_V(!is_open(), -1); ERR_FAIL_COND_V(!is_open(), -1);
unsigned long len; SOCK_FIONREAD_LEN_TYPE len;
int ret = SOCK_IOCTL(_sock, FIONREAD, &len); int ret = SOCK_IOCTL(_sock, FIONREAD, &len);
if (ret == -1) { if (ret == -1) {
_get_socket_error(); _get_socket_error();