From 6fc117bedcf3a217d89f32c9c98008ed4332b4a1 Mon Sep 17 00:00:00 2001 From: dahall Date: Wed, 6 Jul 2022 18:21:14 -0600 Subject: [PATCH] LOTS OF BREAKING CHANGES TO WSA functions in Ws2_32: Changed return values of most functions to `int` instead of incorrect `Win32Error` --- PInvoke/Ws2_32/WinSock2.WSA.cs | 94 ++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 50 deletions(-) diff --git a/PInvoke/Ws2_32/WinSock2.WSA.cs b/PInvoke/Ws2_32/WinSock2.WSA.cs index 2f23c7a1..3ee8c545 100644 --- a/PInvoke/Ws2_32/WinSock2.WSA.cs +++ b/PInvoke/Ws2_32/WinSock2.WSA.cs @@ -780,7 +780,7 @@ namespace Vanara.PInvoke // lpdwAddressStringLength ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "d72e55e6-79a9-4386-9e1a-24a322f13426")] - public static extern Win32Error WSAAddressToString([In] SOCKADDR lpsaAddress, uint dwAddressLength, in WSAPROTOCOL_INFO lpProtocolInfo, StringBuilder lpszAddressString, ref uint lpdwAddressStringLength); + public static extern int WSAAddressToString([In] SOCKADDR lpsaAddress, uint dwAddressLength, in WSAPROTOCOL_INFO lpProtocolInfo, StringBuilder lpszAddressString, ref uint lpdwAddressStringLength); /// /// @@ -880,9 +880,9 @@ namespace Vanara.PInvoke { StringBuilder sb = new((int)sz); err = WSAAddressToString(lpsaAddress, (uint)lpsaAddress.Size, pc, sb, ref sz); - if (err.Succeeded) lpszAddressString = sb.ToString(); + if (err == 0) lpszAddressString = sb.ToString(); } - return err; + return WSAGetLastError(); } /// @@ -989,7 +989,7 @@ namespace Vanara.PInvoke // lpdwAddressStringLength ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "d72e55e6-79a9-4386-9e1a-24a322f13426")] - public static extern Win32Error WSAAddressToString([In] SOCKADDR lpsaAddress, uint dwAddressLength, [Optional] IntPtr lpProtocolInfo, StringBuilder lpszAddressString, ref uint lpdwAddressStringLength); + public static extern int WSAAddressToString([In] SOCKADDR lpsaAddress, uint dwAddressLength, [Optional] IntPtr lpProtocolInfo, StringBuilder lpszAddressString, ref uint lpdwAddressStringLength); /// /// The WSAAsyncGetHostByAddr function asynchronously retrieves host information that corresponds to an address. @@ -2276,7 +2276,7 @@ namespace Vanara.PInvoke // u_int wMsg, long lEvent ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock.h", MSDNShortId = "a4d3f599-358c-4a94-91eb-7e1c80244250")] - public static extern Win32Error WSAAsyncSelect(SOCKET s, HWND hWnd, uint wMsg, int lEvent); + public static extern int WSAAsyncSelect(SOCKET s, HWND hWnd, uint wMsg, int lEvent); /// The WSACancelAsyncRequest function cancels an incomplete asynchronous operation. /// Handle that specifies the asynchronous operation to be canceled. @@ -2336,7 +2336,7 @@ namespace Vanara.PInvoke // hAsyncTaskHandle ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock.h", MSDNShortId = "0e53eccf-ef85-43ec-a02c-12896471a7a9")] - public static extern Win32Error WSACancelAsyncRequest(HANDLE hAsyncTaskHandle); + public static extern int WSACancelAsyncRequest(HANDLE hAsyncTaskHandle); /// The WSACleanup function terminates use of the Winsock 2 DLL (Ws2_32.dll). /// @@ -2414,7 +2414,7 @@ namespace Vanara.PInvoke // https://docs.microsoft.com/en-us/windows/desktop/api/winsock/nf-winsock-wsacleanup int WSACleanup( ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock.h", MSDNShortId = "72b7cc3e-be34-41e7-acbf-61742149ec8b")] - public static extern Win32Error WSACleanup(); + public static extern int WSACleanup(); /// The WSACloseEvent function closes an open event object handle. /// Object handle identifying the open event. @@ -2727,7 +2727,7 @@ namespace Vanara.PInvoke // sockaddr *name, int namelen, LPWSABUF lpCallerData, LPWSABUF lpCalleeData, LPQOS lpSQOS, LPQOS lpGQOS ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "3b32cc6e-3df7-4104-a0d4-317fd445c7b2")] - public static extern Win32Error WSAConnect(SOCKET s, [In] SOCKADDR name, int namelen, [In, Optional] IntPtr lpCallerData, + public static extern int WSAConnect(SOCKET s, [In] SOCKADDR name, int namelen, [In, Optional] IntPtr lpCallerData, [Out, Optional] IntPtr lpCalleeData, [Optional] IntPtr lpSQOS, [Optional] IntPtr lpGQOS); /// @@ -3267,7 +3267,7 @@ namespace Vanara.PInvoke // SOCKET s, DWORD dwProcessId, LPWSAPROTOCOL_INFOA lpProtocolInfo ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "d4028461-bfa6-4074-9460-5d1371790d41")] - public static extern Win32Error WSADuplicateSocket(SOCKET s, uint dwProcessId, out WSAPROTOCOL_INFO lpProtocolInfo); + public static extern int WSADuplicateSocket(SOCKET s, uint dwProcessId, out WSAPROTOCOL_INFO lpProtocolInfo); /// The WSAEnumNameSpaceProviders function retrieves information on available namespace providers. /// @@ -4039,7 +4039,7 @@ namespace Vanara.PInvoke // WSAEVENT hEventObject, long lNetworkEvents ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "f98a71e4-47fb-47a4-b37e-e4cc801a8f98")] - public static extern Win32Error WSAEventSelect(SOCKET s, WSAEVENT hEventObject, FD lNetworkEvents); + public static extern int WSAEventSelect(SOCKET s, WSAEVENT hEventObject, FD lNetworkEvents); /// The WSAGetLastError function returns the error status for the last Windows Sockets operation that failed. /// The return value indicates the error code for this thread's last Windows Sockets operation that failed. @@ -4350,7 +4350,7 @@ namespace Vanara.PInvoke // lpServiceClassInfo ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "e177bb7d-c7d3-43a4-a809-ab8212feea2e")] - public static extern Win32Error WSAGetServiceClassInfo(in Guid lpProviderId, in Guid lpServiceClassId, ref uint lpdwBufSize, IntPtr lpServiceClassInfo); + public static extern int WSAGetServiceClassInfo(in Guid lpProviderId, in Guid lpServiceClassId, ref uint lpdwBufSize, IntPtr lpServiceClassInfo); /// /// The WSAGetServiceClassNameByClassId function retrieves the name of the service associated with the specified type. This @@ -4415,7 +4415,7 @@ namespace Vanara.PInvoke // WSAGetServiceClassNameByClassIdA( LPGUID lpServiceClassId, LPSTR lpszServiceClassName, LPDWORD lpdwBufferLength ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "0a61751e-10e5-4f91-a0b2-8c1baf477653")] - public static extern Win32Error WSAGetServiceClassNameByClassId(in Guid lpServiceClassId, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpszServiceClassName, ref uint lpdwBufferLength); + public static extern int WSAGetServiceClassNameByClassId(in Guid lpServiceClassId, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpszServiceClassName, ref uint lpdwBufferLength); /// The WSAHtonl function converts a u_long from host byte order to network byte order. /// A descriptor identifying a socket. @@ -4477,7 +4477,7 @@ namespace Vanara.PInvoke // hostlong, OUT u_long *lpnetlong ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "33512f49-d576-4439-ad8d-5c87387d6214")] - public static extern Win32Error WSAHtonl([In] SOCKET s, [In] uint hostlong, out uint lpnetlong); + public static extern int WSAHtonl([In] SOCKET s, [In] uint hostlong, out uint lpnetlong); /// The WSAHtons function converts a u_short from host byte order to network byte order. /// A descriptor identifying a socket. @@ -4538,7 +4538,7 @@ namespace Vanara.PInvoke // hostshort, OUT u_short *lpnetshort ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "95fb103b-f7dd-4fa4-bf68-ed8e87cdd96b")] - public static extern Win32Error WSAHtons([In] SOCKET s, [In] ushort hostshort, out ushort lpnetshort); + public static extern int WSAHtons([In] SOCKET s, [In] ushort hostshort, out ushort lpnetshort); /// /// The WSAInstallServiceClass function registers a service class schema within a namespace. This schema includes the class @@ -4605,7 +4605,7 @@ namespace Vanara.PInvoke // WSAInstallServiceClassA( LPWSASERVICECLASSINFOA lpServiceClassInfo ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "06760319-aeeb-4ad7-b77a-01efea7ed904")] - public static extern Win32Error WSAInstallServiceClass(in WSASERVICECLASSINFO lpServiceClassInfo); + public static extern int WSAInstallServiceClass(in WSASERVICECLASSINFO lpServiceClassInfo); /// The WSAIoctl function controls the mode of a socket. /// A descriptor identifying a socket. @@ -4844,7 +4844,7 @@ namespace Vanara.PInvoke // LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "038aeca6-d7b7-4f74-ac69-4536c2e5118b")] - public static extern Win32Error WSAIoctl(SOCKET s, uint dwIoControlCode, [In] IntPtr lpvInBuffer, uint cbInBuffer, [Out] IntPtr lpvOutBuffer, uint cbOutBuffer, out uint lpcbBytesReturned, [Optional] IntPtr lpOverlapped, [Optional] IntPtr lpCompletionRoutine); + public static extern int WSAIoctl(SOCKET s, uint dwIoControlCode, [In] IntPtr lpvInBuffer, uint cbInBuffer, [Out] IntPtr lpvOutBuffer, uint cbOutBuffer, out uint lpcbBytesReturned, [Optional] IntPtr lpOverlapped, [Optional] IntPtr lpCompletionRoutine); /// The WSAIoctl function controls the mode of a socket. /// A descriptor identifying a socket. @@ -5021,13 +5021,13 @@ namespace Vanara.PInvoke { using SafeHGlobalHandle ptrIn = SafeHGlobalHandle.CreateFromStructure(inVal), ptrOut = SafeHGlobalHandle.CreateFromStructure(); var ret = WSAIoctl(s, dwIoControlCode, ptrIn, ptrIn.Size, ptrOut, ptrOut.Size, out var bRet); - if (ret == Win32Error.ERROR_INSUFFICIENT_BUFFER) + if (ret == SOCKET_ERROR) { - ptrOut.Size = bRet; - ret = WSAIoctl(s, dwIoControlCode, ptrIn, ptrIn.Size, ptrOut, ptrOut.Size, out bRet); + outVal = default; + return WSAGetLastError(); } - outVal = ret.Succeeded ? ptrOut.ToStructure() : default; - return ret; + outVal = ptrOut.ToStructure(); + return Win32Error.ERROR_SUCCESS; } /// @@ -5543,7 +5543,7 @@ namespace Vanara.PInvoke // LPWSAQUERYSETA lpqsRestrictions, DWORD dwControlFlags, LPHANDLE lphLookup ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "448309ef-b9dd-4960-8016-d26691df59ec")] - public static extern Win32Error WSALookupServiceBegin(in WSAQUERYSET lpqsRestrictions, LUP dwControlFlags, out HANDLE lphLookup); + public static extern int WSALookupServiceBegin(in WSAQUERYSET lpqsRestrictions, LUP dwControlFlags, out HANDLE lphLookup); /// /// @@ -5592,7 +5592,7 @@ namespace Vanara.PInvoke // HANDLE hLookup ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "f9d2ac54-a818-464d-918e-80ebb5b1b106")] - public static extern Win32Error WSALookupServiceEnd(HANDLE hLookup); + public static extern int WSALookupServiceEnd(HANDLE hLookup); /// /// @@ -5878,7 +5878,7 @@ namespace Vanara.PInvoke // HANDLE hLookup, DWORD dwControlFlags, LPDWORD lpdwBufferLength, LPWSAQUERYSETA lpqsResults ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "ab4f1830-b38d-4224-a6a9-6d4512245ad6")] - public static extern Win32Error WSALookupServiceNext(HANDLE hLookup, LUP dwControlFlags, ref uint lpdwBufferLength, [Out] IntPtr lpqsResults); + public static extern int WSALookupServiceNext(HANDLE hLookup, LUP dwControlFlags, ref uint lpdwBufferLength, [Out] IntPtr lpqsResults); /// The Windows Sockets WSANSPIoctl function enables developers to make I/O control calls to a registered namespace. /// The lookup handle returned from a previous call to the WSALookupServiceBegin function. @@ -6010,7 +6010,7 @@ namespace Vanara.PInvoke // LPWSACOMPLETION lpCompletion ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "6ecaedf0-0038-46d3-9916-c9cb069c5e92")] - public static extern Win32Error WSANSPIoctl(HANDLE hLookup, uint dwControlCode, [In, Optional] IntPtr lpvInBuffer, uint cbInBuffer, [Out, Optional] IntPtr lpvOutBuffer, uint cbOutBuffer, out uint lpcbBytesReturned, [In, Optional] IntPtr lpCompletion); + public static extern int WSANSPIoctl(HANDLE hLookup, uint dwControlCode, [In, Optional] IntPtr lpvInBuffer, uint cbInBuffer, [Out, Optional] IntPtr lpvOutBuffer, uint cbOutBuffer, out uint lpcbBytesReturned, [In, Optional] IntPtr lpCompletion); /// The WSANtohl function converts a u_long from network byte order to host byte order. /// A descriptor identifying a socket. @@ -6072,7 +6072,7 @@ namespace Vanara.PInvoke // u_long *lphostlong ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "7e3b42eb-3b93-459f-828a-c19e277882c7")] - public static extern Win32Error WSANtohl(SOCKET s, uint netlong, out uint lphostlong); + public static extern int WSANtohl(SOCKET s, uint netlong, out uint lphostlong); /// The WSANtohs function converts a u_short from network byte order to host byte order. /// A descriptor identifying a socket. @@ -6133,7 +6133,7 @@ namespace Vanara.PInvoke // u_short *lphostshort ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "0a4bc3a9-9919-4dcb-8a37-af37e0243c8f")] - public static extern Win32Error WSANtohs(SOCKET s, ushort netshort, out ushort lphostshort); + public static extern int WSANtohs(SOCKET s, ushort netshort, out ushort lphostshort); /// The WSAPoll function determines status of one or more sockets. /// @@ -6327,7 +6327,7 @@ namespace Vanara.PInvoke // fds, INT timeout ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "3f6f872c-5cee-49f3-bf22-2e8a5d147987")] - public static extern Win32Error WSAPoll([In, Out, MarshalAs(UnmanagedType.LPArray)] WSAPOLLFD[] fdArray, uint fds, int timeout); + public static extern int WSAPoll([In, Out, MarshalAs(UnmanagedType.LPArray)] WSAPOLLFD[] fdArray, uint fds, int timeout); /// The WSAProviderConfigChange function notifies the application when the provider configuration is changed. /// @@ -6411,7 +6411,7 @@ namespace Vanara.PInvoke // lpCompletionRoutine ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "abaf367a-8f99-478c-a58c-d57e9f9cd8a1")] - public static extern Win32Error WSAProviderConfigChange(ref HANDLE lpNotificationHandle, [In, Out, Optional] IntPtr lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); + public static extern int WSAProviderConfigChange(ref HANDLE lpNotificationHandle, [In, Out, Optional] IntPtr lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); /// The WSARecv function receives data from a connected socket or a bound connectionless socket. /// A descriptor identifying a connected socket. @@ -6804,7 +6804,7 @@ namespace Vanara.PInvoke // LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "bfe66e11-e9a7-4321-ad55-3141113e9a03")] - public static extern Win32Error WSARecv(SOCKET s, [In] IntPtr lpBuffers, uint dwBufferCount, out uint lpNumberOfBytesRecvd, ref MsgFlags lpFlags, [In, Out, Optional] IntPtr lpOverlapped, + public static extern int WSARecv(SOCKET s, [In] IntPtr lpBuffers, uint dwBufferCount, out uint lpNumberOfBytesRecvd, ref MsgFlags lpFlags, [In, Out, Optional] IntPtr lpOverlapped, [In, Optional, MarshalAs(UnmanagedType.FunctionPtr)] LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); /// @@ -6899,7 +6899,7 @@ namespace Vanara.PInvoke // LPWSABUF lpInboundDisconnectData ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "33e0fb8e-3ece-427f-b3ef-43a0f5cf0cc8")] - public static extern Win32Error WSARecvDisconnect(SOCKET s, [In, Out, Optional] IntPtr lpInboundDisconnectData); + public static extern int WSARecvDisconnect(SOCKET s, [In, Out, Optional] IntPtr lpInboundDisconnectData); /// The WSARecvFrom function receives a datagram and stores the source address. /// A descriptor identifying a socket. @@ -7199,7 +7199,7 @@ namespace Vanara.PInvoke // lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "8617dbb8-0e4e-4cd3-9597-5d20de6778f6")] - public static extern Win32Error WSARecvFrom(SOCKET s, [In, Out, Optional, MarshalAs(UnmanagedType.LPArray)] WSABUF[] lpBuffers, uint dwBufferCount, out uint lpNumberOfBytesRecvd, ref MsgFlags lpFlags, + public static extern int WSARecvFrom(SOCKET s, [In, Out, Optional, MarshalAs(UnmanagedType.LPArray)] WSABUF[] lpBuffers, uint dwBufferCount, out uint lpNumberOfBytesRecvd, ref MsgFlags lpFlags, [Out] SOCKADDR lpFrom, ref int lpFromlen, [In, Out, Optional] IntPtr lpOverlapped, [In, Optional, MarshalAs(UnmanagedType.FunctionPtr)] LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); /// The WSARemoveServiceClass function permanently removes the service class schema from the registry. @@ -7246,7 +7246,7 @@ namespace Vanara.PInvoke // LPGUID lpServiceClassId ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "7d72f727-cca9-4a07-beb4-d64f23c1f0c1")] - public static extern Win32Error WSARemoveServiceClass(in Guid lpServiceClassId); + public static extern int WSARemoveServiceClass(in Guid lpServiceClassId); /// The WSAResetEvent function resets the state of the specified event object to nonsignaled. /// A handle that identifies an open event object handle. @@ -7590,7 +7590,7 @@ namespace Vanara.PInvoke // lpCompletionRoutine ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "764339e6-a1ac-455d-8ebd-ad0fa50dc3b0")] - public static extern Win32Error WSASend(SOCKET s, [In, MarshalAs(UnmanagedType.LPArray)] WSABUF[] lpBuffers, uint dwBufferCount, out uint lpNumberOfBytesSent, + public static extern int WSASend(SOCKET s, [In, MarshalAs(UnmanagedType.LPArray)] WSABUF[] lpBuffers, uint dwBufferCount, out uint lpNumberOfBytesSent, MsgFlags dwFlags, [In, Out, Optional] IntPtr lpOverlapped, [In, Optional, MarshalAs(UnmanagedType.FunctionPtr)] LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); /// @@ -7674,7 +7674,7 @@ namespace Vanara.PInvoke // LPWSABUF lpOutboundDisconnectData ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "c05fc719-e35a-4194-ac01-a294b19ccce9")] - public static extern Win32Error WSASendDisconnect(SOCKET s, in WSABUF lpOutboundDisconnectData); + public static extern int WSASendDisconnect(SOCKET s, in WSABUF lpOutboundDisconnectData); /// /// The WSASendDisconnect function initiates termination of the connection for the socket and sends disconnect data. @@ -7757,7 +7757,7 @@ namespace Vanara.PInvoke // LPWSABUF lpOutboundDisconnectData ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "c05fc719-e35a-4194-ac01-a294b19ccce9")] - public static extern Win32Error WSASendDisconnect(SOCKET s, [In, Optional] IntPtr lpOutboundDisconnectData); + public static extern int WSASendDisconnect(SOCKET s, [In, Optional] IntPtr lpOutboundDisconnectData); /// The WSASendMsg function sends data and optional control information from connected and unconnected sockets. /// A descriptor identifying the socket. @@ -8064,7 +8064,7 @@ namespace Vanara.PInvoke // lpCompletionRoutine ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "3b2ba645-6a70-4ba2-b4a2-5bde0c7f8d08")] - public static extern Win32Error WSASendMsg(SOCKET Handle, in WSAMSG lpMsg, MsgFlags dwFlags, out uint lpNumberOfBytesSent, [In, Out, Optional] IntPtr lpOverlapped, + public static extern int WSASendMsg(SOCKET Handle, in WSAMSG lpMsg, MsgFlags dwFlags, out uint lpNumberOfBytesSent, [In, Out, Optional] IntPtr lpOverlapped, [In, Optional, MarshalAs(UnmanagedType.FunctionPtr)] LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); /// The WSASendTo function sends data to a specific destination, using overlapped I/O where applicable. @@ -8370,7 +8370,7 @@ namespace Vanara.PInvoke // lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); [DllImport(Lib.Ws2_32, SetLastError = true, ExactSpelling = true)] [PInvokeData("winsock2.h", MSDNShortId = "e3a11522-871c-4d6b-a2e6-ca91ffc2b698")] - public static extern Win32Error WSASendTo(SOCKET s, [In, MarshalAs(UnmanagedType.LPArray)] WSABUF[] lpBuffers, uint dwBufferCount, out uint lpNumberOfBytesSent, + public static extern int WSASendTo(SOCKET s, [In, MarshalAs(UnmanagedType.LPArray)] WSABUF[] lpBuffers, uint dwBufferCount, out uint lpNumberOfBytesSent, MsgFlags dwFlags, [In, Optional] SOCKADDR lpTo, int iTolen, [In, Out, Optional] IntPtr lpOverlapped, [In, Optional, MarshalAs(UnmanagedType.FunctionPtr)] LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); @@ -8727,7 +8727,7 @@ namespace Vanara.PInvoke // lpqsRegInfo, WSAESETSERVICEOP essoperation, DWORD dwControlFlags ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "21a8ff26-4c9e-4846-a75a-1a27c746edab")] - public static extern Win32Error WSASetService(in WSAQUERYSET lpqsRegInfo, WSAESETSERVICEOP essoperation, ServiceInstallFlags dwControlFlags); + public static extern int WSASetService(in WSAQUERYSET lpqsRegInfo, WSAESETSERVICEOP essoperation, ServiceInstallFlags dwControlFlags); /// The WSASocket function creates a socket that is bound to a specific transport-service provider. /// @@ -10181,7 +10181,7 @@ namespace Vanara.PInvoke // AddressString, INT AddressFamily, LPWSAPROTOCOL_INFOA lpProtocolInfo, LPSOCKADDR lpAddress, LPINT lpAddressLength ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "7b9946c3-c8b3-45ae-9bde-03faaf604bba")] - public static extern Win32Error WSAStringToAddress([MarshalAs(UnmanagedType.LPTStr)] string AddressString, ADDRESS_FAMILY AddressFamily, in WSAPROTOCOL_INFO lpProtocolInfo, [Out] SOCKADDR lpAddress, ref int lpAddressLength); + public static extern int WSAStringToAddress([MarshalAs(UnmanagedType.LPTStr)] string AddressString, ADDRESS_FAMILY AddressFamily, in WSAPROTOCOL_INFO lpProtocolInfo, [Out] SOCKADDR lpAddress, ref int lpAddressLength); /// /// The WSAStringToAddress function converts a network address in its standard text presentation form into its numeric binary @@ -10262,7 +10262,7 @@ namespace Vanara.PInvoke // AddressString, INT AddressFamily, LPWSAPROTOCOL_INFOA lpProtocolInfo, LPSOCKADDR lpAddress, LPINT lpAddressLength ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "7b9946c3-c8b3-45ae-9bde-03faaf604bba")] - public static extern Win32Error WSAStringToAddress([MarshalAs(UnmanagedType.LPTStr)] string AddressString, ADDRESS_FAMILY AddressFamily, [In, Optional] IntPtr lpProtocolInfo, [Out] SOCKADDR lpAddress, ref int lpAddressLength); + public static extern int WSAStringToAddress([MarshalAs(UnmanagedType.LPTStr)] string AddressString, ADDRESS_FAMILY AddressFamily, [In, Optional] IntPtr lpProtocolInfo, [Out] SOCKADDR lpAddress, ref int lpAddressLength); /// /// The WSAStringToAddress function converts a network address in its standard text presentation form into its numeric binary @@ -10343,7 +10343,7 @@ namespace Vanara.PInvoke // AddressString, INT AddressFamily, LPWSAPROTOCOL_INFOA lpProtocolInfo, LPSOCKADDR lpAddress, LPINT lpAddressLength ); [DllImport(Lib.Ws2_32, SetLastError = true, CharSet = CharSet.Auto)] [PInvokeData("winsock2.h", MSDNShortId = "7b9946c3-c8b3-45ae-9bde-03faaf604bba")] - public static extern Win32Error WSAStringToAddress([MarshalAs(UnmanagedType.LPTStr)] string AddressString, ADDRESS_FAMILY AddressFamily, [In, Optional] IntPtr lpProtocolInfo, [Out] IntPtr lpAddress, ref int lpAddressLength); + public static extern int WSAStringToAddress([MarshalAs(UnmanagedType.LPTStr)] string AddressString, ADDRESS_FAMILY AddressFamily, [In, Optional] IntPtr lpProtocolInfo, [Out] IntPtr lpAddress, ref int lpAddressLength); /// /// The WSAStringToAddress function converts a network address in its standard text presentation form into its numeric binary @@ -10360,12 +10360,6 @@ namespace Vanara.PInvoke /// /// A pointer to a buffer that is filled with a sockaddr structure for the address string if the function succeeds. /// - /// - /// A pointer to the length, in bytes, of the buffer pointed to by the lpAddress parameter. If the function call is successful, this - /// parameter returns a pointer to the size of the sockaddr structure returned in the lpAddress parameter. If the specified buffer - /// is not large enough, the function fails with a specific error of WSAEFAULT and this parameter is updated with the required size - /// in bytes. - /// /// /// /// The return value for WSAStringToAddress is zero if the operation was successful. Otherwise, the value SOCKET_ERROR is @@ -10429,8 +10423,8 @@ namespace Vanara.PInvoke using var addr = new SafeCoTaskMemStruct(); int sz = addr.Size; var err = WSAStringToAddress(AddressString, AddressFamily, pc, addr, ref sz); - lpAddress = addr; - return err; + lpAddress = addr.Value; + return err == SOCKET_ERROR ? WSAGetLastError() : Win32Error.ERROR_SUCCESS; } ///