/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuNetResolver.Unix.hpp Date: 2022-8-26 Author: Reece ***/ #pragma once #include "AuNetSocketOverlappedOperation.hpp" #include "AuNetSocket.hpp" namespace Aurora::IO::Net { struct Socket; struct ThreadLocalCaughtCompletion; struct NetResolver : SocketOverlappedOperation, IResolver, AuEnableSharedFromThis { NetResolver(const AuSPtr &pWorker); NetResolver(const AuSPtr &pWorker, const AuSPtr, NetError>> &pCompletion); ~NetResolver(); bool bA {}; bool bAAAA {}; AuString hostname; bool Start(); void SetCompletion(const AuSPtr, NetError>> &callback); void OnOverlappedComplete() override; void OnOverlappedFailure(const NetError &error) override; bool HasFinished() override; void Cancel() override; const NetError &GetError() override; bool UnpackEarly(); bool Unpack(); AuSPtr pEvent; private: AuSPtr pWorker_; AuList processedIps_; AuSPtr, NetError>> pCompletion_; bool bHasCompleted_ {}; bool bHasUnpackedEarly {}; NetError error_; addrinfo infoEx { 0 }; gaicb gnuAsyncOperation {}; // freetarded bool CheckAsync(); friend struct ThreadLocalCaughtCompletion; }; void InitFreetardedResolver(); }