Skip to content

Commit 501023d

Browse files
Proper type for variables and function arguments
The actual optval argument type is DWORD (boolean) for the SOL_SOCKET socket option SO_REUSEADDR: https://docs.microsoft.com/windows/win32/winsock/sol-socket-socket-options The type of the optlen argument of setsockopt() is "int": https://docs.microsoft.com/windows/win32/api/winsock/nf-winsock-setsockopt#syntax The type of the namelen argument of getsockname() is "int *": https://docs.microsoft.com/windows/win32/api/winsock/nf-winsock-getsockname#syntax After these changes, socklen_t is not used anymore. Therefore we can revert from <w2stcpip.h> to <winsock2.h>.
1 parent c3d5bd5 commit 501023d

File tree

3 files changed

+20
-19
lines changed

3 files changed

+20
-19
lines changed

dummy_headers/windows.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
typedef void* SOCKET;
22
typedef unsigned int DWORD;
3+
typedef unsigned int GROUP;
34
#define WSA_FLAG_OVERLAPPED 1
45
extern void WSASetLastError(int);
56
extern int WSAGetLastError();
@@ -8,24 +9,23 @@ extern int WSAGetLastError();
89
#define AF_INET 33
910
#define SOCK_STREAM 44
1011
#define IPPROTO_TCP 55
11-
#define INVALID_SOCKET 0
12+
#define INVALID_SOCKET (SOCKET)(~0)
1213
extern void* socket(int, int, int);
1314
struct sockaddr_in {
1415
int sin_family;
1516
struct { unsigned s_addr; } sin_addr;
1617
unsigned short sin_port;
1718
};
1819
struct sockaddr { int dummy; };
19-
typedef unsigned socklen_t;
2020
#define SOL_SOCKET 66
2121
#define SO_REUSEADDR 77
2222
#define INADDR_LOOPBACK 88
23-
extern int setsockopt(SOCKET, int, int, char*, unsigned);
24-
extern int bind(SOCKET, struct sockaddr*, unsigned);
25-
extern int getsockname(SOCKET, struct sockaddr*, socklen_t*);
23+
extern int setsockopt(SOCKET, int, int, const char*, int);
24+
extern int bind(SOCKET, const struct sockaddr*, int);
25+
extern int getsockname(SOCKET, struct sockaddr*, int*);
2626
extern int listen(SOCKET, int);
27-
extern SOCKET WSASocket(int, int, int, void*, int, int);
28-
extern int connect(SOCKET, struct sockaddr*, unsigned);
29-
extern SOCKET accept(SOCKET, void*, void*);
27+
extern SOCKET WSASocket(int, int, int, void*, GROUP, DWORD);
28+
extern int connect(SOCKET, const struct sockaddr*, int);
29+
extern SOCKET accept(SOCKET, struct sockaddr*, int*);
3030
extern int closesocket(SOCKET);
31-
extern unsigned htonl(unsigned);
31+
extern unsigned long htonl(unsigned long);
File renamed without changes.

socketpair.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2626
*/
2727

2828
/* Changes:
29-
* 2022-11-04: return value types as in Windows Sockets 2 documentation
29+
* 2022-11-04: align types of arguments and return value of Windows Sockets 2
30+
* functions with Muicrosoft documentation
3031
* 2014-02-12: merge David Woodhouse, Ger Hobbelt improvements
3132
* git.infradead.org/users/dwmw2/openconnect.git/commitdiff/bdeefa54
3233
* github.com/GerHobbelt/selectable-socketpair
@@ -52,7 +53,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5253
#include <string.h>
5354

5455
#ifdef WIN32
55-
# include <ws2tcpip.h> /* socklen_t, et al (MSVC20xx) */
56+
# include <winsock2.h>
5657
# include <windows.h>
5758
# include <io.h>
5859
#else
@@ -78,16 +79,16 @@ int dumb_socketpair(SOCKET socks[2], int make_overlapped)
7879
struct sockaddr addr;
7980
} a;
8081
SOCKET listener;
81-
int e;
82-
socklen_t addrlen = sizeof(a.inaddr);
82+
int addrlen = (int) sizeof(a.inaddr);
8383
DWORD flags = (make_overlapped ? WSA_FLAG_OVERLAPPED : 0);
84-
int reuse = 1;
84+
DWORD reuse = 1;
85+
int e;
8586

8687
if (socks == 0) {
8788
WSASetLastError(WSAEINVAL);
8889
return SOCKET_ERROR;
8990
}
90-
socks[0] = socks[1] = -1;
91+
socks[0] = socks[1] = INVALID_SOCKET;
9192

9293
listener = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
9394
if (listener == INVALID_SOCKET)
@@ -100,9 +101,9 @@ int dumb_socketpair(SOCKET socks[2], int make_overlapped)
100101

101102
for (;;) {
102103
if (setsockopt(listener, SOL_SOCKET, SO_REUSEADDR,
103-
(char*) &reuse, (socklen_t) sizeof(reuse)) == SOCKET_ERROR)
104+
(const char*) &reuse, (int) sizeof(reuse)) == SOCKET_ERROR)
104105
break;
105-
if (bind(listener, &a.addr, sizeof(a.inaddr)) == SOCKET_ERROR)
106+
if (bind(listener, &a.addr, (int) sizeof(a.inaddr)) == SOCKET_ERROR)
106107
break;
107108

108109
memset(&a, 0, sizeof(a));
@@ -119,7 +120,7 @@ int dumb_socketpair(SOCKET socks[2], int make_overlapped)
119120
socks[0] = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, flags);
120121
if (socks[0] == INVALID_SOCKET)
121122
break;
122-
if (connect(socks[0], &a.addr, sizeof(a.inaddr)) == SOCKET_ERROR)
123+
if (connect(socks[0], &a.addr, (int) sizeof(a.inaddr)) == SOCKET_ERROR)
123124
break;
124125

125126
socks[1] = accept(listener, NULL, NULL);
@@ -135,7 +136,7 @@ int dumb_socketpair(SOCKET socks[2], int make_overlapped)
135136
closesocket(socks[0]);
136137
closesocket(socks[1]);
137138
WSASetLastError(e);
138-
socks[0] = socks[1] = -1;
139+
socks[0] = socks[1] = INVALID_SOCKET;
139140
return SOCKET_ERROR;
140141
}
141142
#else

0 commit comments

Comments
 (0)