TarsCloud / Tars

Tars is a high-performance RPC framework based on name service and Tars protocol, also integrated administration platform, and implemented hosting-service via flexible schedule.
BSD 3-Clause "New" or "Revised" License
9.79k stars 2.08k forks source link

recvTcp() check iBytesReceived size[BUG] #900

Closed Aluem closed 1 month ago

Aluem commented 1 month ago

tarscpp.util.src.tc_epoll_server.cpp中recvTcp()方法


int TC_EpollServer::Connection::recvTcp()
{
    ...
    int iBytesReceived = _sock.recv((void *)buffer, BUFFER_SIZE);
    // while iBytesReceived > 0
        //接收到数据不超过buffer,没有数据了(如果有数据,内核会再通知你)
        if ((size_t) iBytesReceived < BUFFER_SIZE) {
            break;
        }
}

((size_t) iBytesReceived < BUFFER_SIZE)这里如果客户端发送的网络包被分批发送,也会满足该条件,此时接收到的数据应该是不完整的

Aluem commented 1 month ago

后续看到在int TC_EpollServer::Connection::parseProtocol(TC_NetWorkBuffer &rbuf)中处理了。。。