MCPcopy Create free account
hub / github.com/LUX-Core/lux / SocketSendData

Function SocketSendData

src/net.cpp:816–856  ·  view source on GitHub ↗

requires LOCK(cs_vSend)

Source from the content-addressed store, hash-verified

814
815// requires LOCK(cs_vSend)
816void SocketSendData(CNode* pnode)
817{
818 std::deque<CSerializeData>::iterator it = pnode->vSendMsg.begin();
819
820 while (it != pnode->vSendMsg.end()) {
821 const CSerializeData& data = *it;
822 assert(data.size() > pnode->nSendOffset);
823 int nBytes = send(pnode->hSocket, &data[pnode->nSendOffset], data.size() - pnode->nSendOffset, MSG_NOSIGNAL | MSG_DONTWAIT);
824 if (nBytes > 0) {
825 pnode->nLastSend = GetTime();
826 pnode->nSendBytes += nBytes;
827 pnode->nSendOffset += nBytes;
828 pnode->RecordBytesSent(nBytes);
829 if (pnode->nSendOffset == data.size()) {
830 pnode->nSendOffset = 0;
831 pnode->nSendSize -= data.size();
832 it++;
833 } else {
834 // could not send full message; stop sending more
835 break;
836 }
837 } else {
838 if (nBytes < 0) {
839 // error
840 int nErr = WSAGetLastError();
841 if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS) {
842 LogPrintf("socket send error %s\n", NetworkErrorString(nErr));
843 pnode->CloseSocketDisconnect();
844 }
845 }
846 // couldn't send anything at all
847 break;
848 }
849 }
850
851 if (it == pnode->vSendMsg.end()) {
852 assert(pnode->nSendOffset == 0);
853 assert(pnode->nSendSize == 0);
854 }
855 pnode->vSendMsg.erase(pnode->vSendMsg.begin(), it);
856}
857
858static list<CNode*> vNodesDisconnected;
859

Callers 2

ThreadSocketHandlerFunction · 0.85
UNLOCK_FUNCTIONFunction · 0.85

Calls 8

GetTimeFunction · 0.85
NetworkErrorStringFunction · 0.85
RecordBytesSentMethod · 0.80
CloseSocketDisconnectMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45
eraseMethod · 0.45

Tested by

no test coverage detected