Network/SocketImpl: Fix Send causing a SocketError_Internal status on non-blocking sockets

This commit is contained in:
Lynix 2017-01-27 15:05:04 +01:00
parent 002d33f590
commit 453ca77c1b
2 changed files with 62 additions and 12 deletions

View File

@ -562,10 +562,22 @@ namespace Nz
int byteSent = send(handle, reinterpret_cast<const char*>(buffer), length, 0);
if (byteSent == SOCKET_ERROR)
{
if (error)
*error = TranslateErrnoToResolveError(GetLastErrorCode());
int errorCode = GetLastErrorCode();
return false; //< Error
switch (errorCode)
{
case EWOULDBLOCK:
byteSent = 0;
break;
default:
{
if (error)
*error = TranslateErrnoToResolveError(errorCode);
return false; //< Error
}
}
}
if (sent)
@ -639,10 +651,22 @@ namespace Nz
int byteSent = sendto(handle, reinterpret_cast<const char*>(buffer), length, 0, reinterpret_cast<const sockaddr*>(nameBuffer.data()), bufferLength);
if (byteSent == SOCKET_ERROR)
{
if (error)
*error = TranslateErrnoToResolveError(GetLastErrorCode());
int errorCode = GetLastErrorCode();
return false; //< Error
switch (errorCode)
{
case EWOULDBLOCK:
byteSent = 0;
break;
default:
{
if (error)
*error = TranslateErrnoToResolveError(errorCode);
return false; //< Error
}
}
}
if (sent)

View File

@ -594,10 +594,23 @@ namespace Nz
int byteSent = send(handle, reinterpret_cast<const char*>(buffer), length, 0);
if (byteSent == SOCKET_ERROR)
{
if (error)
*error = TranslateWSAErrorToSocketError(WSAGetLastError());
int errorCode = WSAGetLastError();
switch (errorCode)
{
case WSAEWOULDBLOCK:
{
byteSent = 0;
break;
}
return false; //< Error
default:
{
if (error)
*error = TranslateWSAErrorToSocketError(errorCode);
return false; //< Error
}
}
}
if (sent)
@ -667,10 +680,23 @@ namespace Nz
int byteSent = sendto(handle, reinterpret_cast<const char*>(buffer), length, 0, reinterpret_cast<const sockaddr*>(nameBuffer.data()), bufferLength);
if (byteSent == SOCKET_ERROR)
{
if (error)
*error = TranslateWSAErrorToSocketError(WSAGetLastError());
int errorCode = WSAGetLastError();
switch (errorCode)
{
case WSAEWOULDBLOCK:
{
byteSent = 0;
break;
}
return false; //< Error
default:
{
if (error)
*error = TranslateWSAErrorToSocketError(errorCode);
return false; //< Error
}
}
}
if (sent)