Network/TcpClient: Add Connect overload resolving hostname
Former-commit-id: 5c667a14c591e4e9cb898a8d4c83fedf161179fd
This commit is contained in:
parent
3b9c736c16
commit
a26c979d84
|
|
@ -46,6 +46,7 @@ namespace Nz
|
||||||
SocketError_NetworkError, //< The network system has failed (maybe network is down)
|
SocketError_NetworkError, //< The network system has failed (maybe network is down)
|
||||||
SocketError_NotInitialized, //< Nazara network has not been initialized
|
SocketError_NotInitialized, //< Nazara network has not been initialized
|
||||||
SocketError_NotSupported, //< The operation is not supported (e.g. creating a bluetooth socket on a system without any bluetooth adaptater)
|
SocketError_NotSupported, //< The operation is not supported (e.g. creating a bluetooth socket on a system without any bluetooth adaptater)
|
||||||
|
SocketError_ResolveError, //< The hostname couldn't be resolved (more information in ResolveError code)
|
||||||
SocketError_ResourceError, //< The operating system lacks the resources to proceed (e.g. memory/socket descriptor)
|
SocketError_ResourceError, //< The operating system lacks the resources to proceed (e.g. memory/socket descriptor)
|
||||||
SocketError_UnreachableHost, //< The host is not reachable
|
SocketError_UnreachableHost, //< The host is not reachable
|
||||||
SocketError_TimedOut, //< The operation timed out
|
SocketError_TimedOut, //< The operation timed out
|
||||||
|
|
@ -60,6 +61,7 @@ namespace Nz
|
||||||
SocketState_Connecting, //< The socket is currently connecting
|
SocketState_Connecting, //< The socket is currently connecting
|
||||||
SocketState_Connected, //< The socket is currently connected
|
SocketState_Connected, //< The socket is currently connected
|
||||||
SocketState_NotConnected, //< The socket is not connected (or has been disconnected)
|
SocketState_NotConnected, //< The socket is not connected (or has been disconnected)
|
||||||
|
SocketState_Resolving, //< The socket is currently resolving a hostname
|
||||||
|
|
||||||
SocketState_Max = SocketState_NotConnected
|
SocketState_Max = SocketState_NotConnected
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ namespace Nz
|
||||||
inline IpAddress(const IPv6& ip, UInt16 port = 0);
|
inline IpAddress(const IPv6& ip, UInt16 port = 0);
|
||||||
inline IpAddress(const UInt8& a, const UInt8& b, const UInt8& c, const UInt8& d, UInt16 port = 0);
|
inline IpAddress(const UInt8& a, const UInt8& b, const UInt8& c, const UInt8& d, UInt16 port = 0);
|
||||||
inline IpAddress(const UInt16& a, const UInt16& b, const UInt16& c, const UInt16& d, const UInt16& e, const UInt16& f, const UInt16& g, const UInt16& h, UInt16 port = 0);
|
inline IpAddress(const UInt16& a, const UInt16& b, const UInt16& c, const UInt16& d, const UInt16& e, const UInt16& f, const UInt16& g, const UInt16& h, UInt16 port = 0);
|
||||||
inline IpAddress(const char* address);
|
inline explicit IpAddress(const char* address);
|
||||||
inline IpAddress(const String& address);
|
inline explicit IpAddress(const String& address);
|
||||||
IpAddress(const IpAddress&) = default;
|
IpAddress(const IpAddress&) = default;
|
||||||
IpAddress(IpAddress&&) = default;
|
IpAddress(IpAddress&&) = default;
|
||||||
~IpAddress() = default;
|
~IpAddress() = default;
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ namespace Nz
|
||||||
~TcpClient() = default;
|
~TcpClient() = default;
|
||||||
|
|
||||||
SocketState Connect(const IpAddress& remoteAddress);
|
SocketState Connect(const IpAddress& remoteAddress);
|
||||||
|
SocketState Connect(const String& hostName, NetProtocol protocol = NetProtocol_Any, const String& service = "http", ResolveError* error = nullptr);
|
||||||
inline void Disconnect();
|
inline void Disconnect();
|
||||||
|
|
||||||
void EnableLowDelay(bool lowDelay);
|
void EnableLowDelay(bool lowDelay);
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,34 @@ namespace Nz
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SocketState TcpClient::Connect(const String& hostName, NetProtocol protocol, const String& service, ResolveError* error)
|
||||||
|
{
|
||||||
|
Disconnect();
|
||||||
|
|
||||||
|
UpdateState(SocketState_Resolving);
|
||||||
|
std::vector<HostnameInfo> results = IpAddress::ResolveHostname(protocol, hostName, service, error);
|
||||||
|
if (results.empty())
|
||||||
|
{
|
||||||
|
m_lastError = SocketError_ResolveError;
|
||||||
|
|
||||||
|
UpdateState(SocketState_NotConnected);
|
||||||
|
return m_state;
|
||||||
|
}
|
||||||
|
|
||||||
|
IpAddress hostnameAddress;
|
||||||
|
for (const HostnameInfo& result : results)
|
||||||
|
{
|
||||||
|
//TODO: Check PF_ type (TCP)
|
||||||
|
if (!result.address)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
hostnameAddress = result.address;
|
||||||
|
break; //< Take first valid address
|
||||||
|
}
|
||||||
|
|
||||||
|
return Connect(hostnameAddress);
|
||||||
|
}
|
||||||
|
|
||||||
void TcpClient::EnableLowDelay(bool lowDelay)
|
void TcpClient::EnableLowDelay(bool lowDelay)
|
||||||
{
|
{
|
||||||
NazaraAssert(m_handle != SocketImpl::InvalidHandle, "Invalid handle");
|
NazaraAssert(m_handle != SocketImpl::InvalidHandle, "Invalid handle");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue