优化asynctcpclient connect逻辑
This commit is contained in:
parent
645913c9d4
commit
d6786bcdb1
@ -125,14 +125,28 @@ namespace a8
|
|||||||
|
|
||||||
void AsyncTcpClient::DoSend()
|
void AsyncTcpClient::DoSend()
|
||||||
{
|
{
|
||||||
if(socket_ == -1){
|
if (socket_ == -1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!work_node_) {
|
||||||
|
send_buffer_mutex_->lock();
|
||||||
|
work_node_ = top_node_;
|
||||||
|
top_node_ = nullptr;
|
||||||
|
bot_node_ = nullptr;
|
||||||
|
send_buffer_mutex_->unlock();
|
||||||
|
}
|
||||||
if (!connected_) {
|
if (!connected_) {
|
||||||
int error = 0;
|
int error = 0;
|
||||||
socklen_t len = sizeof(error);
|
socklen_t len = sizeof(error);
|
||||||
::getsockopt(socket_, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len);
|
::getsockopt(socket_, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len);
|
||||||
if( !error ) {
|
if( !error ) {
|
||||||
|
if (!work_node_) {
|
||||||
|
struct epoll_event ev;
|
||||||
|
ev.data.fd = socket_;
|
||||||
|
ev.events = EPOLLIN | EPOLLRDHUP;
|
||||||
|
ev.data.ptr = this;
|
||||||
|
::epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, socket_, &ev);
|
||||||
|
}
|
||||||
DoConnect();
|
DoConnect();
|
||||||
} else {
|
} else {
|
||||||
connected_ = false;
|
connected_ = false;
|
||||||
@ -148,13 +162,6 @@ namespace a8
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!work_node_) {
|
|
||||||
send_buffer_mutex_->lock();
|
|
||||||
work_node_ = top_node_;
|
|
||||||
top_node_ = nullptr;
|
|
||||||
bot_node_ = nullptr;
|
|
||||||
send_buffer_mutex_->unlock();
|
|
||||||
}
|
|
||||||
if (work_node_) {
|
if (work_node_) {
|
||||||
AsyncSend();
|
AsyncSend();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user