mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-11 15:48:05 +00:00
net: rearrange so that socket accesses can be grouped together
This commit is contained in:
parent
02464da5e4
commit
45e2e08561
37
src/net.cpp
37
src/net.cpp
@ -1152,9 +1152,6 @@ void CConnman::ThreadSocketHandler()
|
|||||||
{
|
{
|
||||||
if (pnode->hSocket == INVALID_SOCKET)
|
if (pnode->hSocket == INVALID_SOCKET)
|
||||||
continue;
|
continue;
|
||||||
FD_SET(pnode->hSocket, &fdsetError);
|
|
||||||
hSocketMax = std::max(hSocketMax, pnode->hSocket);
|
|
||||||
have_fds = true;
|
|
||||||
|
|
||||||
// Implement the following logic:
|
// Implement the following logic:
|
||||||
// * If there is data to send, select() for sending data. As this only
|
// * If there is data to send, select() for sending data. As this only
|
||||||
@ -1166,16 +1163,24 @@ void CConnman::ThreadSocketHandler()
|
|||||||
// receiving data.
|
// receiving data.
|
||||||
// * Hand off all complete messages to the processor, to be handled without
|
// * Hand off all complete messages to the processor, to be handled without
|
||||||
// blocking here.
|
// blocking here.
|
||||||
|
|
||||||
|
bool select_recv = !pnode->fPauseRecv;
|
||||||
|
bool select_send;
|
||||||
{
|
{
|
||||||
LOCK(pnode->cs_vSend);
|
LOCK(pnode->cs_vSend);
|
||||||
if (!pnode->vSendMsg.empty()) {
|
select_send = !pnode->vSendMsg.empty();
|
||||||
FD_SET(pnode->hSocket, &fdsetSend);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
{
|
|
||||||
if (!pnode->fPauseRecv)
|
FD_SET(pnode->hSocket, &fdsetError);
|
||||||
FD_SET(pnode->hSocket, &fdsetRecv);
|
hSocketMax = std::max(hSocketMax, pnode->hSocket);
|
||||||
|
have_fds = true;
|
||||||
|
|
||||||
|
if (select_send) {
|
||||||
|
FD_SET(pnode->hSocket, &fdsetSend);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (select_recv) {
|
||||||
|
FD_SET(pnode->hSocket, &fdsetRecv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1229,9 +1234,15 @@ void CConnman::ThreadSocketHandler()
|
|||||||
//
|
//
|
||||||
// Receive
|
// Receive
|
||||||
//
|
//
|
||||||
|
bool recvSet = false;
|
||||||
|
bool sendSet = false;
|
||||||
|
bool errorSet = false;
|
||||||
if (pnode->hSocket == INVALID_SOCKET)
|
if (pnode->hSocket == INVALID_SOCKET)
|
||||||
continue;
|
continue;
|
||||||
if (FD_ISSET(pnode->hSocket, &fdsetRecv) || FD_ISSET(pnode->hSocket, &fdsetError))
|
recvSet = FD_ISSET(pnode->hSocket, &fdsetRecv);
|
||||||
|
sendSet = FD_ISSET(pnode->hSocket, &fdsetSend);
|
||||||
|
errorSet = FD_ISSET(pnode->hSocket, &fdsetError);
|
||||||
|
if (recvSet || errorSet)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
@ -1286,9 +1297,7 @@ void CConnman::ThreadSocketHandler()
|
|||||||
//
|
//
|
||||||
// Send
|
// Send
|
||||||
//
|
//
|
||||||
if (pnode->hSocket == INVALID_SOCKET)
|
if (sendSet)
|
||||||
continue;
|
|
||||||
if (FD_ISSET(pnode->hSocket, &fdsetSend))
|
|
||||||
{
|
{
|
||||||
LOCK(pnode->cs_vSend);
|
LOCK(pnode->cs_vSend);
|
||||||
size_t nBytes = SocketSendData(pnode);
|
size_t nBytes = SocketSendData(pnode);
|
||||||
|
Loading…
Reference in New Issue
Block a user