@@ -17,7 +17,8 @@ Module Name:
1717#include " socket.hpp"
1818#pragma hdrstop
1919
20- void wsl::windows::common::socket::Accept (_In_ SOCKET ListenSocket, _In_ SOCKET Socket, _In_ int Timeout, _In_opt_ HANDLE ExitHandle)
20+ void wsl::windows::common::socket::Accept (
21+ _In_ SOCKET ListenSocket, _In_ SOCKET Socket, _In_ int Timeout, _In_opt_ HANDLE ExitHandle, _In_ const std::source_location& Location)
2122{
2223 CHAR AcceptBuffer[2 * sizeof (SOCKADDR_STORAGE)]{};
2324 DWORD BytesReturned;
@@ -29,17 +30,20 @@ void wsl::windows::common::socket::Accept(_In_ SOCKET ListenSocket, _In_ SOCKET
2930
3031 if (!Success)
3132 {
32- GetResult (ListenSocket, Overlapped, Timeout, ExitHandle);
33+ GetResult (ListenSocket, Overlapped, Timeout, ExitHandle, Location );
3334 }
3435
3536 // Set the accept context to mark the socket as connected.
36- THROW_LAST_ERROR_IF (
37- setsockopt (Socket, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT, reinterpret_cast <char *>(&ListenSocket), sizeof (ListenSocket)) == SOCKET_ERROR);
37+ THROW_LAST_ERROR_IF_MSG (
38+ setsockopt (Socket, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT, reinterpret_cast <char *>(&ListenSocket), sizeof (ListenSocket)) == SOCKET_ERROR,
39+ " From: %hs" ,
40+ std::format (" {}" , Location).c_str ());
3841
3942 return ;
4043}
4144
42- std::pair<DWORD, DWORD> wsl::windows::common::socket::GetResult (_In_ SOCKET Socket, _In_ OVERLAPPED& Overlapped, _In_ DWORD Timeout, _In_ HANDLE ExitHandle)
45+ std::pair<DWORD, DWORD> wsl::windows::common::socket::GetResult (
46+ _In_ SOCKET Socket, _In_ OVERLAPPED& Overlapped, _In_ DWORD Timeout, _In_ HANDLE ExitHandle, _In_ const std::source_location& Location)
4347{
4448 const int error = WSAGetLastError ();
4549 THROW_HR_IF (HRESULT_FROM_WIN32 (error), error != WSA_IO_PENDING);
@@ -64,7 +68,7 @@ std::pair<DWORD, DWORD> wsl::windows::common::socket::GetResult(_In_ SOCKET Sock
6468 return {0 , 0 };
6569 }
6670
67- THROW_HR_IF (HCS_E_CONNECTION_TIMEOUT, (waitStatus != WAIT_OBJECT_0));
71+ THROW_HR_IF_MSG (HCS_E_CONNECTION_TIMEOUT, (waitStatus != WAIT_OBJECT_0), " From: %hs " , std::format ( " {} " , Location). c_str ( ));
6872
6973 cancelFunction.release ();
7074 const bool result = WSAGetOverlappedResult (Socket, &Overlapped, &bytesProcessed, FALSE , &flagsReturned);
@@ -83,16 +87,17 @@ std::pair<DWORD, DWORD> wsl::windows::common::socket::GetResult(_In_ SOCKET Sock
8387 return {bytesProcessed, flagsReturned};
8488}
8589
86- int wsl::windows::common::socket::Receive (_In_ SOCKET Socket, _In_ gsl::span<gsl::byte> Buffer, _In_opt_ HANDLE ExitHandle, _In_ DWORD Flags, _In_ DWORD Timeout)
90+ int wsl::windows::common::socket::Receive (
91+ _In_ SOCKET Socket, _In_ gsl::span<gsl::byte> Buffer, _In_opt_ HANDLE ExitHandle, _In_ DWORD Flags, _In_ DWORD Timeout, _In_ const std::source_location& Location)
8792{
88- const int BytesRead = ReceiveNoThrow (Socket, Buffer, ExitHandle, Flags, Timeout);
93+ const int BytesRead = ReceiveNoThrow (Socket, Buffer, ExitHandle, Flags, Timeout, Location );
8994 THROW_LAST_ERROR_IF (BytesRead == SOCKET_ERROR);
9095
9196 return BytesRead;
9297}
9398
9499int wsl::windows::common::socket::ReceiveNoThrow (
95- _In_ SOCKET Socket, _In_ gsl::span<gsl::byte> Buffer, _In_opt_ HANDLE ExitHandle, _In_ DWORD Flags, _In_ DWORD Timeout)
100+ _In_ SOCKET Socket, _In_ gsl::span<gsl::byte> Buffer, _In_opt_ HANDLE ExitHandle, _In_ DWORD Flags, _In_ DWORD Timeout, _In_ const std::source_location& Location )
96101{
97102 OVERLAPPED Overlapped{};
98103 const wil::unique_event OverlappedEvent (wil::EventOptions::ManualReset);
@@ -103,7 +108,7 @@ int wsl::windows::common::socket::ReceiveNoThrow(
103108 try
104109 {
105110 BytesReturned = SOCKET_ERROR;
106- auto [innerBytes, Flags] = GetResult (Socket, Overlapped, Timeout, ExitHandle);
111+ auto [innerBytes, Flags] = GetResult (Socket, Overlapped, Timeout, ExitHandle, Location );
107112 BytesReturned = innerBytes;
108113 }
109114 catch (...)
@@ -116,20 +121,22 @@ int wsl::windows::common::socket::ReceiveNoThrow(
116121 return BytesReturned;
117122}
118123
119- std::vector<gsl::byte> wsl::windows::common::socket::Receive (_In_ SOCKET Socket, _In_opt_ HANDLE ExitHandle, _In_ DWORD Timeout)
124+ std::vector<gsl::byte> wsl::windows::common::socket::Receive (
125+ _In_ SOCKET Socket, _In_opt_ HANDLE ExitHandle, _In_ DWORD Timeout, _In_ const std::source_location& Location)
120126{
121- Receive (Socket, {}, ExitHandle, MSG_PEEK);
127+ Receive (Socket, {}, ExitHandle, MSG_PEEK, Timeout, Location );
122128
123129 ULONG Size = 0 ;
124130 THROW_LAST_ERROR_IF (ioctlsocket (Socket, FIONREAD, &Size) == SOCKET_ERROR);
125131
126132 std::vector<gsl::byte> Buffer (Size);
127- WI_VERIFY (Receive (Socket, gsl::make_span (Buffer), ExitHandle, Timeout) == static_cast <int >(Size));
133+ WI_VERIFY (Receive (Socket, gsl::make_span (Buffer), ExitHandle, MSG_WAITALL, Timeout, Location ) == static_cast <int >(Size));
128134
129135 return Buffer;
130136}
131137
132- int wsl::windows::common::socket::Send (_In_ SOCKET Socket, _In_ gsl::span<const gsl::byte> Buffer, _In_opt_ HANDLE ExitHandle)
138+ int wsl::windows::common::socket::Send (
139+ _In_ SOCKET Socket, _In_ gsl::span<const gsl::byte> Buffer, _In_opt_ HANDLE ExitHandle, _In_ const std::source_location& Location)
133140{
134141 OVERLAPPED Overlapped{};
135142 const wil::unique_event OverlappedEvent (wil::EventOptions::ManualReset);
@@ -139,7 +146,7 @@ int wsl::windows::common::socket::Send(_In_ SOCKET Socket, _In_ gsl::span<const
139146 if (WSASend (Socket, &VectorBuffer, 1 , &BytesWritten, 0 , &Overlapped, nullptr ) != 0 )
140147 {
141148 DWORD Flags;
142- std::tie (BytesWritten, Flags) = GetResult (Socket, Overlapped, INFINITE, ExitHandle);
149+ std::tie (BytesWritten, Flags) = GetResult (Socket, Overlapped, INFINITE, ExitHandle, Location );
143150 }
144151
145152 WI_ASSERT (BytesWritten == gsl::narrow_cast<DWORD>(Buffer.size ()));
0 commit comments