TCPSocket::EJobResult SecureSocket::doWrite() { static bool s_retry = false; static int s_retrySize = 0; static void* s_staticBuffer = NULL; // write data int bufferSize = 0; int bytesWrote = 0; int status = 0; if (s_retry) { bufferSize = s_retrySize; } else { bufferSize = m_outputBuffer.getSize(); s_staticBuffer = malloc(bufferSize); memcpy(s_staticBuffer, m_outputBuffer.peek(bufferSize), bufferSize); } if (bufferSize == 0) { return kRetry; } if (isSecureReady()) { status = secureWrite(s_staticBuffer, bufferSize, bytesWrote); if (status > 0) { s_retry = false; bufferSize = 0; free(s_staticBuffer); s_staticBuffer = NULL; } else if (status < 0) { return kBreak; } else if (status == 0) { s_retry = true; s_retrySize = bufferSize; return kNew; } } else { return kRetry; } if (bytesWrote > 0) { discardWrittenData(bytesWrote); return kNew; } return kRetry; }
TCPSocket::EJobResult TCPSocket::doWrite() { // write data UInt32 bufferSize = 0; int bytesWrote = 0; bufferSize = m_outputBuffer.getSize(); const void* buffer = m_outputBuffer.peek(bufferSize); bytesWrote = static_cast<UInt32>(ARCH->writeSocket(m_socket, buffer, bufferSize)); if (bytesWrote > 0) { discardWrittenData(bytesWrote); return kNew; } return kRetry; }