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; }