All pastes #962667 Raw Edit

Miscellany

public text v1 · immutable
#962667 ·published 2008-03-29 22:57 UTC
rendered paste body
bool MessageHandler::CanSendSocket(int fd)
{
	OutputDebugText("Entering MessageHandler::CanSendSocket\n");
	// ASSUME: fd > stdout's fd
	fd_set writeFDs;
	timeval timeout = mTimeout; // Copy in case select() modifies the value
	FD_SET(fd, &writeFDs);
	select(fd+1, NULL, &writeFDs, NULL, &timeout);
	OutputDebugText("Exiting MessageHandler::CanSendSocket\n");
	return FD_ISSET(fd, &writeFDs);
}

bool MessageHandler::SendClientRequest(int fd, const ClientRequest& request)
{
	if (!CanSendSocket(fd))
	{
		OutputDebugText("Unable to send request\n");
		return false;
	}
	OutputDebugText("a\n");
	std::stringstream sendBuffer;
	sendBuffer << gGlobalData.GetConstants()->GetMethod(request.mMethod) << " " << request.mTransactionID 
		<< " " << request.mSequence << " " << request.mDataLength;
	OutputDebugText("b\n");
	if (request.mDataLength > 0)
	{
		sendBuffer << "\r\n\r\n" << request.mData;
	}
	else
	{
		sendBuffer << "\r\n\r\n\r\n";
	}
	OutputDebugText("c\n");
	// Hopefully it is not a fatal assumption that MTU is 2k.
	if (send(fd, sendBuffer.str().c_str(), sendBuffer.str().length(), 0) != sendBuffer.str().length())
	{
		OutputDebugText("Error sending message, an incorrect number of bytes were transmitted\n");
		return false;
	}
	OutputDebugText("Successfully sent message\n");
	return true;
}