Kai Blin : ws2_32: Implement SO_GET_MAX_MSG_SIZE for getsockopt.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Nov 29 07:24:03 CST 2006
Module: wine
Branch: master
Commit: 7e6b7d21b94269f80602674169883bd20c442ecf
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7e6b7d21b94269f80602674169883bd20c442ecf
Author: Kai Blin <kai.blin at gmail.com>
Date: Tue Nov 28 18:43:49 2006 +0100
ws2_32: Implement SO_GET_MAX_MSG_SIZE for getsockopt.
---
dlls/ws2_32/socket.c | 13 +++++++++++++
dlls/ws2_32/tests/sock.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 56 insertions(+), 1 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index e5aeed5..50443de 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -1828,6 +1828,19 @@ INT WINAPI WS_getsockopt(SOCKET s, INT l
return 0;
}
+ if (level == WS_SOL_SOCKET && optname == WS_SO_MAX_MSG_SIZE)
+ {
+ if(!optlen || *optlen < sizeof(int) || !optval)
+ {
+ SetLastError(WSAEFAULT);
+ return SOCKET_ERROR;
+ }
+ TRACE("getting global SO_MAX_MSG_SIZE = 65507\n");
+ *(int *)optval = 65507;
+ *optlen = sizeof(int);
+ return 0;
+ }
+
#ifdef HAVE_IPX
if(level == NSPROTO_IPX)
{
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index 837eec1..c8b9cc8 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -1410,6 +1410,47 @@ static void test_select(void)
}
+static void test_extendedSocketOptions()
+{
+ WSADATA wsa;
+ SOCKET sock;
+ struct sockaddr_in sa;
+ int sa_len = sizeof(struct sockaddr_in);
+ int optval, optlen = sizeof(int), ret;
+
+ if(WSAStartup(MAKEWORD(2,0), &wsa)){
+ trace("Winsock failed: 0x%08x. Aborting test\n", WSAGetLastError());
+ return;
+ }
+
+ memset(&sa, 0, sa_len);
+
+ sa.sin_family = AF_INET;
+ sa.sin_port = htons(0);
+ sa.sin_addr.s_addr = htonl(INADDR_ANY);
+
+ if((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)) < 0){
+ trace("Creating the socket failed: 0x%08x\n", WSAGetLastError());
+ WSACleanup();
+ return;
+ }
+
+ if(bind(sock, (struct sockaddr *) &sa, sa_len) < 0){
+ trace("Failed to bind socket: 0x%08x\n", WSAGetLastError());
+ closesocket(sock);
+ WSACleanup();
+ return;
+ }
+
+ ret = getsockopt(sock, SOL_SOCKET, SO_MAX_MSG_SIZE, (char *)&optval, (int *)&optlen);
+
+ ok(ret == 0, "getsockopt failed to query SO_MAX_MSG_SIZE, return value is 0x%08x\n", ret);
+ ok(optval == 65507, "SO_MAX_MSG_SIZE reported %d, expected 65507\n", optval);
+
+ closesocket(sock);
+ WSACleanup();
+}
+
/**************** Main program ***************/
START_TEST( sock )
@@ -1419,6 +1460,7 @@ START_TEST( sock )
test_set_getsockopt();
test_so_reuseaddr();
+ test_extendedSocketOptions();
for (i = 0; i < NUM_TESTS; i++)
{
@@ -1438,6 +1480,6 @@ START_TEST( sock )
test_WSAStringToAddressW();
test_select();
-
+
Exit();
}
More information about the wine-cvs
mailing list