Improved buffering behavior.

This commit is contained in:
Gunnar Beutner 2012-03-28 14:06:02 +02:00
parent 4bd2adc4f9
commit 221bbe9a07

View File

@ -34,8 +34,16 @@ int TCPClient::ReadableEventHandler(EventArgs::RefType ea)
char buffer[4096]; char buffer[4096];
int rc; int rc;
while (true) {
rc = recv(GetFD(), buffer, sizeof(buffer), 0); rc = recv(GetFD(), buffer, sizeof(buffer), 0);
#ifdef _WIN32
if (rc < 0 && WSAGetLastError() == WSAEWOULDBLOCK)
#else /* _WIN32 */
if (rc < 0 && errno == EAGAIN)
#endif /* _WIN32 */
break;
if (rc <= 0) { if (rc <= 0) {
Close(); Close();
return 0; return 0;
@ -43,6 +51,10 @@ int TCPClient::ReadableEventHandler(EventArgs::RefType ea)
m_RecvQueue->Write(buffer, rc); m_RecvQueue->Write(buffer, rc);
if (m_RecvQueue->GetSize() > 1024 * 1024)
break;
}
EventArgs::RefType dea = new_object<EventArgs>(); EventArgs::RefType dea = new_object<EventArgs>();
dea->Source = shared_from_this(); dea->Source = shared_from_this();
OnDataAvailable(dea); OnDataAvailable(dea);