Server/C++

WSASend에서 Scatter-Gather 기법 사용하기

Juzdalua 2024. 8. 16. 23:34

1개 데이터만 보낼 때

WSABUF wsaBuf;
wsaBuf.buf = (char*)_sendEvent.buffer.data();
wsaBuf.len = (ULONG)_sendEvent.buffer.size();

DWORD numOfBytes = 0;
WSASend(_socket, &wsaBuf, 1, OUT & numOfBytes, 0, &_sendEvent, nullptr);

 

여러 데이터를 보낼 때

// Scatter-Gather => 흩어져 있는 데이터들을 모아서 한방에 보낸다.
Vector<WSABUF> wsaBufs;
wsaBufs.reserve(_sendEvent.sendBuffers.size());
for (SendBufferRef sendBuffer : _sendEvent.sendBuffers)
{
	WSABUF wsaBuf;
	wsaBuf.buf = reinterpret_cast<char*>(sendBuffer->Buffer());
	wsaBuf.len = static_cast<LONG>(sendBuffer->WriteSize());
	wsaBufs.push_back(wsaBuf);
}

DWORD numOfBytes = 0;
WSASend(_socket, wsaBufs.data(), static_cast<DWORD>(wsaBufs.size()), OUT & numOfBytes, 0, &_sendEvent, nullptr);