Add GetSocketFromGroup.

This commit is contained in:
Jean-Baptiste Perrier
2021-02-18 18:07:12 +01:00
parent 4408e3bb3b
commit 4ec2381716
4 changed files with 34 additions and 0 deletions

View File

@@ -359,6 +359,24 @@ int32 Win32Network::AddSocketToGroup(NetworkSocketGroup& group, NetworkSocket& s
return group.Count - 1;
}
bool Win32Network::GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, NetworkSocket* socket)
{
if (index >= SOCKGROUP_MAXCOUNT)
return true;
SOCKET s = ((pollfd*)&group.Data[index * SOCKGROUP_ITEMSIZE])->fd;
memcpy(socket->Data, &s, sizeof s);
int32 value;
if (GetSocketOption(*socket, NetworkSocketOption::Type, &value))
return true;
if (value == SOCK_DGRAM)
socket->Protocol = NetworkProtocol::Udp;
else if (value == SOCK_STREAM)
socket->Protocol = NetworkProtocol::Tcp;
else
socket->Protocol = NetworkProtocol::Undefined;
return false;
}
void Win32Network::ClearGroup(NetworkSocketGroup& group)
{
group.Count = 0;

View File

@@ -28,6 +28,7 @@ public:
static int32 Poll(NetworkSocketGroup& group);
static bool GetSocketState(NetworkSocketGroup& group, uint32 index, NetworkSocketState& state);
static int32 AddSocketToGroup(NetworkSocketGroup& group, NetworkSocket& socket);
static bool GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, NetworkSocket* socket);
static void ClearGroup(NetworkSocketGroup& group);
static int32 WriteSocket(NetworkSocket socket, byte* data, uint32 length, NetworkEndPoint* endPoint = nullptr);
static int32 ReadSocket(NetworkSocket socket, byte* buffer, uint32 bufferSize, NetworkEndPoint* endPoint = nullptr);