Network/SocketImpl: Fix possible code errors (Posix)

This commit is contained in:
Lynix 2017-01-27 15:05:26 +01:00
parent 453ca77c1b
commit d8b7ff9fa6
1 changed files with 16 additions and 3 deletions

View File

@ -464,6 +464,9 @@ namespace Nz
if (byteRead == SOCKET_ERROR) if (byteRead == SOCKET_ERROR)
{ {
int errorCode = GetLastErrorCode(); int errorCode = GetLastErrorCode();
if (errorCode == EAGAIN)
errorCode = EWOULDBLOCK;
switch (errorCode) switch (errorCode)
{ {
case EWOULDBLOCK: case EWOULDBLOCK:
@ -513,6 +516,9 @@ namespace Nz
if (byteRead == SOCKET_ERROR) if (byteRead == SOCKET_ERROR)
{ {
int errorCode = GetLastErrorCode(); int errorCode = GetLastErrorCode();
if (errorCode == EAGAIN)
errorCode = EWOULDBLOCK;
switch (errorCode) switch (errorCode)
{ {
case EWOULDBLOCK: case EWOULDBLOCK:
@ -563,6 +569,8 @@ namespace Nz
if (byteSent == SOCKET_ERROR) if (byteSent == SOCKET_ERROR)
{ {
int errorCode = GetLastErrorCode(); int errorCode = GetLastErrorCode();
if (errorCode == EAGAIN)
errorCode = EWOULDBLOCK;
switch (errorCode) switch (errorCode)
{ {
@ -595,7 +603,7 @@ namespace Nz
NazaraAssert(buffers && bufferCount > 0, "Invalid buffers"); NazaraAssert(buffers && bufferCount > 0, "Invalid buffers");
StackAllocation memory = NazaraStackAllocation(bufferCount * sizeof(iovec)); StackAllocation memory = NazaraStackAllocation(bufferCount * sizeof(iovec));
iovec* sysBuffers = static_cast<iovec*>(memory.GetPtr()); struct iovec* sysBuffers = static_cast<struct iovec*>(memory.GetPtr());
for (std::size_t i = 0; i < bufferCount; ++i) for (std::size_t i = 0; i < bufferCount; ++i)
{ {
sysBuffers[i].iov_base = buffers[i].data; sysBuffers[i].iov_base = buffers[i].data;
@ -611,10 +619,13 @@ namespace Nz
msgHdr.msg_iov = sysBuffers; msgHdr.msg_iov = sysBuffers;
msgHdr.msg_iovlen = static_cast<int>(bufferCount); msgHdr.msg_iovlen = static_cast<int>(bufferCount);
int sentLength = sendmsg (socket, &msgHdr, MSG_NOSIGNAL); int sentLength = sendmsg(socket, &msgHdr, MSG_NOSIGNAL);
if (byteSent == SOCKET_ERROR) if (byteSent == SOCKET_ERROR)
{ {
int errorCode = GetLastErrorCode(); int errorCode = GetLastErrorCode();
if (errorCode == EAGAIN)
errorCode = EWOULDBLOCK;
switch (errorCode) switch (errorCode)
{ {
case EWOULDBLOCK: case EWOULDBLOCK:
@ -652,6 +663,8 @@ namespace Nz
if (byteSent == SOCKET_ERROR) if (byteSent == SOCKET_ERROR)
{ {
int errorCode = GetLastErrorCode(); int errorCode = GetLastErrorCode();
if (errorCode == EAGAIN)
errorCode = EWOULDBLOCK;
switch (errorCode) switch (errorCode)
{ {