2 * PROJECT: ReactOS api tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for send/sendto
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
11 #define WIN32_NO_STATUS
12 #include <ndk/mmfuncs.h>
13 #include <ndk/rtlfuncs.h>
18 _In_ SIZE_T SizeRequested
)
21 SIZE_T Size
= PAGE_ROUND_UP(SizeRequested
);
22 PVOID VirtualMemory
= NULL
;
24 Status
= NtAllocateVirtualMemory(NtCurrentProcess(), &VirtualMemory
, 0, &Size
, MEM_COMMIT
, PAGE_READONLY
);
25 if (!NT_SUCCESS(Status
))
34 _In_ PVOID VirtualMemory
)
39 Status
= NtFreeVirtualMemory(NtCurrentProcess(), &VirtualMemory
, &Size
, MEM_RELEASE
);
40 ok(Status
== STATUS_SUCCESS
, "Status = %lx\n", Status
);
52 struct sockaddr_in addr
;
55 buffer
= AllocateReadOnly(bufferSize
);
56 ok(buffer
!= NULL
, "AllocateReadOnly failed\n");
63 ret
= send(0, NULL
, 0, 0);
64 error
= WSAGetLastError();
65 ok(ret
== SOCKET_ERROR
, "send returned %d\n", ret
);
66 ok(error
== WSAENOTSOCK
, "error = %d\n", error
);
68 ret
= send(0, buffer
, bufferSize
, 0);
69 error
= WSAGetLastError();
70 ok(ret
== SOCKET_ERROR
, "send returned %d\n", ret
);
71 ok(error
== WSAENOTSOCK
, "error = %d\n", error
);
73 sock
= socket(AF_INET
, SOCK_STREAM
, IPPROTO_TCP
);
74 ok(sock
!= INVALID_SOCKET
, "socket failed\n");
75 if (sock
== INVALID_SOCKET
)
82 ret
= send(sock
, NULL
, 0, 0);
83 error
= WSAGetLastError();
84 ok(ret
== SOCKET_ERROR
, "send returned %d\n", ret
);
85 ok(error
== WSAENOTCONN
, "error = %d\n", error
);
87 ret
= send(sock
, buffer
, bufferSize
, 0);
88 error
= WSAGetLastError();
89 ok(ret
== SOCKET_ERROR
, "send returned %d\n", ret
);
90 ok(error
== WSAENOTCONN
, "error = %d\n", error
);
92 memset(&addr
, 0, sizeof(addr
));
93 addr
.sin_family
= AF_INET
;
94 addr
.sin_addr
.s_addr
= inet_addr("8.8.8.8");
95 addr
.sin_port
= htons(53);
96 ret
= connect(sock
, (const struct sockaddr
*)&addr
, sizeof(addr
));
97 error
= WSAGetLastError();
98 ok(ret
== 0, "connect returned %d\n", ret
);
99 ok(error
== 0, "error = %d\n", error
);
101 ret
= send(sock
, NULL
, 0, 0);
102 error
= WSAGetLastError();
103 ok(ret
== 0, "send returned %d\n", ret
);
104 ok(error
== 0, "error = %d\n", error
);
106 ret
= send(sock
, buffer
, bufferSize
, 0);
107 error
= WSAGetLastError();
108 ok(ret
== bufferSize
, "send returned %d\n", ret
);
109 ok(error
== 0, "error = %d\n", error
);
113 FreeReadOnly(buffer
);
125 struct sockaddr_in addr
;
128 buffer
= AllocateReadOnly(bufferSize
);
129 ok(buffer
!= NULL
, "AllocateReadOnly failed\n");
136 memset(&addr
, 0, sizeof(addr
));
137 addr
.sin_family
= AF_INET
;
138 addr
.sin_addr
.s_addr
= inet_addr("8.8.8.8");
139 addr
.sin_port
= htons(53);
141 ret
= sendto(0, NULL
, 0, 0, (const struct sockaddr
*)&addr
, sizeof(addr
));
142 error
= WSAGetLastError();
143 ok(ret
== SOCKET_ERROR
, "sendto returned %d\n", ret
);
144 ok(error
== WSAENOTSOCK
, "error = %d\n", error
);
146 ret
= sendto(0, buffer
, bufferSize
, 0, (const struct sockaddr
*)&addr
, sizeof(addr
));
147 error
= WSAGetLastError();
148 ok(ret
== SOCKET_ERROR
, "sendto returned %d\n", ret
);
149 ok(error
== WSAENOTSOCK
, "error = %d\n", error
);
151 sock
= socket(AF_INET
, SOCK_DGRAM
, IPPROTO_UDP
);
152 ok(sock
!= INVALID_SOCKET
, "socket failed\n");
153 if (sock
== INVALID_SOCKET
)
156 FreeReadOnly(buffer
);
160 ret
= sendto(sock
, NULL
, 0, 0, (const struct sockaddr
*)&addr
, sizeof(addr
));
161 error
= WSAGetLastError();
162 ok(ret
== 0, "sendto returned %d\n", ret
);
163 ok(error
== 0, "error = %d\n", error
);
165 ret
= sendto(sock
, buffer
, bufferSize
, 0, (const struct sockaddr
*)&addr
, sizeof(addr
));
166 error
= WSAGetLastError();
167 ok(ret
== bufferSize
, "sendto returned %d\n", ret
);
168 ok(error
== 0, "error = %d\n", error
);
172 FreeReadOnly(buffer
);
180 ret
= WSAStartup(MAKEWORD(2, 2), &wsad
);
181 ok(ret
== 0, "WSAStartup failed with %d\n", ret
);