Revamp IsReadable & IsWriteable.
This commit is contained in:
@@ -61,11 +61,16 @@ bool NetworkBase::Accept(NetworkSocket& serverSock, NetworkSocket& newSock, Netw
|
||||
return false;
|
||||
}
|
||||
|
||||
bool NetworkBase::IsReadable(NetworkSocket& socket, uint64* size)
|
||||
bool NetworkBase::IsReadable(NetworkSocket& socket)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool NetworkBase::IsWriteable(NetworkSocket& socket)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
int32 NetworkBase::WriteSocket(NetworkSocket socket, byte* data, uint32 length, NetworkEndPoint* endPoint)
|
||||
{
|
||||
return 0;
|
||||
|
||||
@@ -69,7 +69,8 @@ class FLAXENGINE_API NetworkBase
|
||||
static bool BindSocket(NetworkSocket& socket, NetworkEndPoint& endPoint);
|
||||
static bool Listen(NetworkSocket& socket, uint16 queueSize);
|
||||
static bool Accept(NetworkSocket& serverSock, NetworkSocket& newSock, NetworkEndPoint& newEndPoint);
|
||||
static bool IsReadable(NetworkSocket& socket, uint64* size);
|
||||
static bool IsReadable(NetworkSocket& socket);
|
||||
static bool IsWriteable(NetworkSocket& socket);
|
||||
static int32 WriteSocket(NetworkSocket socket, byte* data, uint32 length, NetworkEndPoint* endPoint = nullptr);
|
||||
static int32 ReadSocket(NetworkSocket socket, byte* buffer, uint32 bufferSize, NetworkEndPoint* endPoint = nullptr);
|
||||
static bool CreateEndPoint(String* address, String* port, NetworkIPVersion ipv, NetworkEndPoint& endPoint, bool bindable = false);
|
||||
|
||||
@@ -288,15 +288,45 @@ bool Win32Network::Accept(NetworkSocket& serverSock, NetworkSocket& newSock, Net
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Win32Network::IsReadable(NetworkSocket& socket, uint64* size)
|
||||
bool Win32Network::IsReadable(NetworkSocket& socket)
|
||||
{
|
||||
unsigned long value;
|
||||
if (ioctlsocket(*(SOCKET*)socket.Data, FIONREAD, &value) != 0)
|
||||
fd_set readfds;
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(*(SOCKET*)socket.Data, &readfds);
|
||||
timeval t;
|
||||
t.tv_sec = 0;
|
||||
t.tv_usec = 0;
|
||||
if (select(0, &readfds, nullptr, nullptr, &t) == SOCKET_ERROR)
|
||||
{
|
||||
LOG(Error, "Unable to query socket for readability! Socket : {0} Error : {1}", *(SOCKET*)socket.Data, GetLastErrorMessage().Get());
|
||||
return true;
|
||||
int error = WSAGetLastError();
|
||||
if (error == WSAEWOULDBLOCK)
|
||||
return false;
|
||||
LOG(Error, "Unable to check readability of socket! Socket : {0} Error : {1}", *(SOCKET*)socket.Data, GetErrorMessage(error).Get());
|
||||
return false;
|
||||
}
|
||||
*size = value;
|
||||
if (FD_ISSET(*(SOCKET*)socket.Data, &readfds))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Win32Network::IsWriteable(NetworkSocket& socket)
|
||||
{
|
||||
fd_set writefds;
|
||||
FD_ZERO(&writefds);
|
||||
FD_SET(*(SOCKET*)socket.Data, &writefds);
|
||||
timeval t;
|
||||
t.tv_sec = 0;
|
||||
t.tv_usec = 0;
|
||||
if (select(0, nullptr, &writefds, nullptr, &t) == SOCKET_ERROR)
|
||||
{
|
||||
int error = WSAGetLastError();
|
||||
if (error == WSAEWOULDBLOCK)
|
||||
return false;
|
||||
LOG(Error, "Unable to check writeability of socket! Socket : {0} Error : {1}", *(SOCKET*)socket.Data, GetErrorMessage(error).Get());
|
||||
return false;
|
||||
}
|
||||
if (FD_ISSET(*(SOCKET*)socket.Data, &writefds))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,8 @@ public:
|
||||
static bool BindSocket(NetworkSocket& socket, NetworkEndPoint& endPoint);
|
||||
static bool Listen(NetworkSocket& socket, uint16 queueSize);
|
||||
static bool Accept(NetworkSocket& serverSock, NetworkSocket& newSock, NetworkEndPoint& newEndPoint);
|
||||
static bool IsReadable(NetworkSocket& socket, uint64* size);
|
||||
static bool IsReadable(NetworkSocket& socket);
|
||||
static bool IsWriteable(NetworkSocket& socket);
|
||||
static int32 WriteSocket(NetworkSocket socket, byte* data, uint32 length, NetworkEndPoint* endPoint = nullptr);
|
||||
static int32 ReadSocket(NetworkSocket socket, byte* buffer, uint32 bufferSize, NetworkEndPoint* endPoint = nullptr);
|
||||
static bool CreateEndPoint(String* address, String* port, NetworkIPVersion ipv, NetworkEndPoint& endPoint, bool bindable = false);
|
||||
|
||||
Reference in New Issue
Block a user