73 lock (getAddrInfoExState)
76 if (cancellationContext !=
null)
78 num = global::Interop.Winsock.GetAddrInfoExCancel(&cancellationContext->
CancelHandle);
146 public unsafe global::Interop.Winsock.AddressInfoEx*
Result;
161 if (context->
Result !=
null)
163 global::Interop.Winsock.FreeAddrInfoExW(context->
Result);
182 static void Initialize()
184 global::Interop.Winsock.EnsureInitialized();
195 global::Interop.Winsock.EnsureInitialized();
196 aliases =
Array.Empty<
string>();
197 global::Interop.Winsock.AddressInfo addressInfo =
default(global::Interop.Winsock.AddressInfo);
198 addressInfo.ai_family = addressFamily;
199 global::Interop.Winsock.AddressInfo addressInfo2 = addressInfo;
204 global::Interop.Winsock.AddressInfo* ptr =
null;
207 SocketError addrInfoW = (
SocketError)global::Interop.Winsock.GetAddrInfoW(name,
null, &addressInfo2, &ptr);
210 nativeErrorCode = (int)addrInfoW;
223 global::Interop.Winsock.FreeAddrInfoW(ptr);
230 global::Interop.Winsock.EnsureInitialized();
234 for (
int i = 0; i < socketAddress.
Size; i++)
236 span2[i] = socketAddress[i];
238 char* ptr = stackalloc
char[1025];
239 fixed (
byte* pSockaddr = span2)
241 errorCode = global::Interop.Winsock.GetNameInfoW(pSockaddr, socketAddress.
Size, ptr, 1025,
null, 0, 4);
248 nativeErrorCode = (int)errorCode;
254 global::Interop.Winsock.EnsureInitialized();
255 byte* ptr = stackalloc
byte[256];
256 SocketError socketError = global::Interop.Winsock.gethostname(ptr, 256);
257 if (socketError != 0)
265 return new string((sbyte*)ptr);
270 global::Interop.Winsock.EnsureInitialized();
283 global::Interop.Winsock.AddressInfoEx addressInfoEx =
default(global::Interop.Winsock.AddressInfoEx);
284 addressInfoEx.ai_family = family;
285 global::Interop.Winsock.AddressInfoEx addressInfoEx2 = addressInfoEx;
290 SocketError addrInfoExW = (
SocketError)global::Interop.Winsock.GetAddrInfoExW(hostName,
null, 0,
IntPtr.
Zero, &addressInfoEx2, &ptr->
Result,
IntPtr.
Zero, &ptr->
Overlapped, (delegate* unmanaged<int, int, NativeOverlapped*, void>)(delegate*<int, int,
NativeOverlapped*,
void>)(&
GetAddressInfoExCallback), &ptr->
CancelHandle);
304 return getAddrInfoExState.
Task;
307 [UnmanagedCallersOnly]
325 HostName = (hostName ?? getAddrInfoExState.
HostName),
326 Aliases =
Array.Empty<
string>(),
342 private unsafe
static IPAddress[]
ParseAddressInfo(global::Interop.Winsock.AddressInfo* addressInfoPtr,
bool justAddresses, out
string hostName)
345 for (global::Interop.Winsock.AddressInfo* ptr = addressInfoPtr; ptr !=
null; ptr = ptr->ai_next)
347 int num2 = (int)ptr->ai_addrlen;
362 string text = (justAddresses ?
"NONNULLSENTINEL" :
null);
363 for (global::Interop.Winsock.AddressInfo* ptr2 = addressInfoPtr; ptr2 !=
null; ptr2 = ptr2->ai_next)
365 if (
text ==
null && ptr2->ai_canonname !=
null)
369 int num3 = (int)ptr2->ai_addrlen;
383 hostName = (justAddresses ? null :
text);
387 private unsafe
static IPAddress[]
ParseAddressInfoEx(global::Interop.Winsock.AddressInfoEx* addressInfoExPtr,
bool justAddresses, out
string hostName)
390 for (global::Interop.Winsock.AddressInfoEx* ptr = addressInfoExPtr; ptr !=
null; ptr = ptr->ai_next)
392 int num2 = (int)ptr->ai_addrlen;
407 string text = (justAddresses ?
"NONNULLSENTINEL" :
null);
408 for (global::Interop.Winsock.AddressInfoEx* ptr2 = addressInfoExPtr; ptr2 !=
null; ptr2 = ptr2->ai_next)
414 int num3 = (int)ptr2->ai_addrlen;
428 hostName = (justAddresses ? null :
text);
override SocketAddress Serialize()
AsyncTaskMethodBuilder< IPAddress[]> IPAddressArrayBuilder
static GetAddrInfoExState FromHandleAndFree(IntPtr handle)
AsyncTaskMethodBuilder< IPHostEntry > IPHostEntryBuilder
unsafe CancellationToken UnregisterAndGetCancellationToken()
unsafe GetAddrInfoExContext * _cancellationContext
unsafe GetAddrInfoExState(GetAddrInfoExContext *context, string hostName, bool justAddresses)
void SetResult(object result)
unsafe void RegisterForCancellation(CancellationToken cancellationToken)
CancellationTokenRegistration _cancellationRegistration
static unsafe IPAddress[] ParseAddressInfoEx(global::Interop.Winsock.AddressInfoEx *addressInfoExPtr, bool justAddresses, out string hostName)
static IPAddress CreateIPv6Address(ReadOnlySpan< byte > socketAddress)
static bool SupportsGetAddrInfoAsync
static IPAddress CreateIPv4Address(ReadOnlySpan< byte > socketAddress)
static unsafe void GetAddressInfoExCallback(int error, int bytes, NativeOverlapped *overlapped)
static unsafe IPAddress[] ParseAddressInfo(global::Interop.Winsock.AddressInfo *addressInfoPtr, bool justAddresses, out string hostName)
static unsafe void ProcessResult(SocketError errorCode, GetAddrInfoExContext *context)
static unsafe string GetHostName()
static unsafe SocketError TryGetAddrInfo(string name, bool justAddresses, AddressFamily addressFamily, out string hostName, out string[] aliases, out IPAddress[] addresses, out int nativeErrorCode)
static unsafe string TryGetNameInfo(IPAddress addr, out SocketError errorCode, out int nativeErrorCode)
static unsafe Task GetAddrInfoAsync(string hostName, bool justAddresses, AddressFamily family, CancellationToken cancellationToken)
static volatile int s_getAddrInfoExSupported
static readonly System.Net.NetEventSource Log
static void Info(object thisOrContextObject, FormattableString formattableString=null, [CallerMemberName] string memberName=null)
static void Error(object thisOrContextObject, FormattableString formattableString, [CallerMemberName] string memberName=null)
static uint GetIPv4Address(ReadOnlySpan< byte > buffer)
static void GetIPv6Address(ReadOnlySpan< byte > buffer, Span< byte > address, out uint scope)
static bool OSSupportsIPv6
static Exception SetCurrentStackTrace(Exception source)
static void FreeHGlobal(IntPtr hglobal)
static unsafe? string PtrToStringUni(IntPtr ptr)
static IntPtr AllocHGlobal(int cb)
static bool TryGetExport(IntPtr handle, string name, out IntPtr address)
static int CompareExchange(ref int location1, int value, int comparand)
static bool UnsafeQueueUserWorkItem(WaitCallback callBack, object? state)
static readonly IntPtr Zero
unsafe global::Interop.Winsock.AddressInfoEx * Result
static unsafe GetAddrInfoExContext * AllocateContext()
static unsafe void FreeContext(GetAddrInfoExContext *context)
NativeOverlapped Overlapped
static AsyncTaskMethodBuilder Create()
static IntPtr ToIntPtr(GCHandle value)
static GCHandle Alloc(object? value)
static GCHandle FromIntPtr(IntPtr value)
bool IsCancellationRequested