From 345cf608b33eecbce5823443611db33e33d11b6a Mon Sep 17 00:00:00 2001 From: J Reece Wilson Date: Sat, 23 Sep 2023 09:25:18 +0100 Subject: [PATCH] [*] Linux connect by hostname regression/first pass? --- Source/IO/Net/AuNetSocket.NT.cpp | 4 +++ Source/IO/Net/AuNetSocket.Unix.cpp | 55 ++++++++---------------------- Source/IO/Net/AuNetSocket.cpp | 4 +++ 3 files changed, 22 insertions(+), 41 deletions(-) diff --git a/Source/IO/Net/AuNetSocket.NT.cpp b/Source/IO/Net/AuNetSocket.NT.cpp index 6d0df8f3..fb297d29 100644 --- a/Source/IO/Net/AuNetSocket.NT.cpp +++ b/Source/IO/Net/AuNetSocket.NT.cpp @@ -84,6 +84,10 @@ namespace Aurora::IO::Net if (this->bHasRemoteMany_ && this->connectMany_.ips.size()) { this->remoteEndpoint_ = this->connectMany_.ips[0]; + if (this->remoteEndpoint_.transportProtocol == ETransportProtocol::kEnumInvalid) + { + this->remoteEndpoint_.transportProtocol = this->connectMany_.protocol; + } } if (this->osHandle_ && diff --git a/Source/IO/Net/AuNetSocket.Unix.cpp b/Source/IO/Net/AuNetSocket.Unix.cpp index 513895b8..e7601e54 100644 --- a/Source/IO/Net/AuNetSocket.Unix.cpp +++ b/Source/IO/Net/AuNetSocket.Unix.cpp @@ -82,11 +82,14 @@ namespace Aurora::IO::Net if (this->bHasRemoteMany_ && this->connectMany_.ips.size()) { this->remoteEndpoint_ = this->connectMany_.ips[0]; + if (this->remoteEndpoint_.transportProtocol == ETransportProtocol::kEnumInvalid) + { + this->remoteEndpoint_.transportProtocol = this->connectMany_.protocol; + } } this->CloseSocket(); - this->osHandle_ = ::socket( IPToDomain(this->remoteEndpoint_), TransportToPlatformType(this->remoteEndpoint_) | SOCK_CLOEXEC, @@ -127,54 +130,24 @@ namespace Aurora::IO::Net } } - void Socket::FinishConstructAsync() { - if (!this->SendPreestablish()) + + if (this->resolveLater.size() || this->bResolving_) { - SysPushErrorIO("Preestablish drop"); + if (!this->TryStartResolve()) + { + this->SendErrorNoStream(GetLastNetError()); + return; + } + return; } - this->osHandle_ = ::socket( - IPToDomain(this->remoteEndpoint_), - TransportToPlatformType(this->remoteEndpoint_) | SOCK_CLOEXEC, - 0 - ); - - bool bMakeCloseExec { !bool(SOCK_CLOEXEC) }; - - if (this->osHandle_ == -1) - { - this->osHandle_ = ::socket( - IPToDomain(this->remoteEndpoint_), - TransportToPlatformType(this->remoteEndpoint_), - 0 - ); - - bMakeCloseExec = true; - } - - if (this->osHandle_ == -1) - { - this->SendErrorNoStream(GetLastNetError()); - return; - } - - if (bMakeCloseExec) - { - (void)this->MakeCloseonexec(); - } - - this->osHandleOwner_->InitFromPairMove((int)this->osHandle_, (int)this->osHandle_); - - if (!this->PrepareConnectOperations()) - { - this->bForceFailConstruct_ = true; - return; - } + RenewSocket(); } + bool Socket::PrepareConnectOperations() { return this->MakeNonblocking(); diff --git a/Source/IO/Net/AuNetSocket.cpp b/Source/IO/Net/AuNetSocket.cpp index 307c0807..39ccab1f 100644 --- a/Source/IO/Net/AuNetSocket.cpp +++ b/Source/IO/Net/AuNetSocket.cpp @@ -175,6 +175,10 @@ namespace Aurora::IO::Net pThat->bResolving_ = false; pThat->connectMany_.uPort = pThat->remoteEndpoint_.uPort; pThat->connectMany_.ips.insert(pThat->connectMany_.ips.end(), ips->begin(), ips->end()); + if (pThat->remoteEndpoint_.transportProtocol == ETransportProtocol::kEnumInvalid) + { + pThat->remoteEndpoint_.transportProtocol = this->connectMany_.protocol; + } pThat->bHasRemoteMany_ = true; pThat->RenewSocket(); pThat->ConnectNext();