diff --git a/uppsrc/Core/Inet.h b/uppsrc/Core/Inet.h index cde01971d..9609c36ca 100644 --- a/uppsrc/Core/Inet.h +++ b/uppsrc/Core/Inet.h @@ -680,7 +680,7 @@ public: String GetError() const { return Nvl(socket->GetErrorDesc(), error); } bool Accept(TcpSocket& listener_socket); - void Connect(const String& url); + bool Connect(const String& url); void Do(); diff --git a/uppsrc/Core/WebSocket.cpp b/uppsrc/Core/WebSocket.cpp index 075d419d6..e5c3d191d 100644 --- a/uppsrc/Core/WebSocket.cpp +++ b/uppsrc/Core/WebSocket.cpp @@ -54,7 +54,7 @@ bool WebSocket::Accept(TcpSocket& listen_socket) return true; } -void WebSocket::Connect(const String& url) +bool WebSocket::Connect(const String& url) { Clear(); @@ -80,15 +80,19 @@ void WebSocket::Connect(const String& url) if(socket->IsBlocking()) { if(!addrinfo.Execute(host, port)) { Error("Not found"); - return; + return false; } LLOG("DNS resolved"); StartConnect(); - while(opcode != READING_FRAME_HEADER) + while(opcode != READING_FRAME_HEADER) { Do0(); + if(IsError()) + return false; + } } else opcode = DNS; + return true; } void WebSocket::SendRequest() diff --git a/uppsrc/Core/src.tpp/WebSocket$en-us.tpp b/uppsrc/Core/src.tpp/WebSocket$en-us.tpp index 9b6ab4db5..c31b9d7d2 100644 --- a/uppsrc/Core/src.tpp/WebSocket$en-us.tpp +++ b/uppsrc/Core/src.tpp/WebSocket$en-us.tpp @@ -45,9 +45,10 @@ cpSocket][@(0.0.255) `&]_[*@3 listen`_socket])&] on success.&] [s3;%% &] [s4; &] -[s5;:Upp`:`:WebSocket`:`:Connect`(const Upp`:`:String`&`): [@(0.0.255) void]_[* Connect]( +[s5;:Upp`:`:WebSocket`:`:Connect`(const Upp`:`:String`&`): [@(0.0.255) bool]_[* Connect]( [@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 url])&] -[s2;%% Initiates connection to [%-*@3 url].&] +[s2;%% Initiates connection to [%-*@3 url]. In blocking mode returns +false if connection cannot be established, otherwise true.&] [s3;%% &] [s4; &] [s5;:Upp`:`:WebSocket`:`:Do`(`): [@(0.0.255) void]_[* Do]()&]