diff options
Diffstat (limited to 'net/socket/client_socket_handle.cc')
-rw-r--r-- | net/socket/client_socket_handle.cc | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/net/socket/client_socket_handle.cc b/net/socket/client_socket_handle.cc index 96dec03..15f99a6 100644 --- a/net/socket/client_socket_handle.cc +++ b/net/socket/client_socket_handle.cc @@ -16,8 +16,8 @@ ClientSocketHandle::ClientSocketHandle(ClientSocketPool* pool) : pool_(pool), socket_(NULL), is_reused_(false), - ALLOW_THIS_IN_INITIALIZER_LIST( - callback_(this, &ClientSocketHandle::OnIOComplete)) {} + ALLOW_THIS_IN_INITIALIZER_LIST( + callback_(this, &ClientSocketHandle::OnIOComplete)) {} ClientSocketHandle::~ClientSocketHandle() { Reset(); @@ -29,9 +29,14 @@ int ClientSocketHandle::Init(const std::string& group_name, CompletionCallback* callback) { ResetInternal(true); group_name_ = group_name; - user_callback_ = callback; - return pool_->RequestSocket( + int rv = pool_->RequestSocket( group_name, resolve_info, priority, this, &callback_); + if (rv == ERR_IO_PENDING) { + user_callback_ = callback; + } else { + HandleInitCompletion(rv); + } + return rv; } void ClientSocketHandle::Reset() { @@ -62,12 +67,16 @@ LoadState ClientSocketHandle::GetLoadState() const { } void ClientSocketHandle::OnIOComplete(int result) { - CHECK(ERR_IO_PENDING != result); CompletionCallback* callback = user_callback_; user_callback_ = NULL; + HandleInitCompletion(result); + callback->Run(result); +} + +void ClientSocketHandle::HandleInitCompletion(int result) { + CHECK(ERR_IO_PENDING != result); if (result != OK) ResetInternal(false); // The request failed, so there's nothing to cancel. - callback->Run(result); } } // namespace net |