Add RemoveSocketFromGroup.

This commit is contained in:
Jean-Baptiste Perrier
2021-02-18 19:40:45 +01:00
parent 94381f356c
commit d1f30a973d
4 changed files with 62 additions and 3 deletions

View File

@@ -353,12 +353,21 @@ int32 Win32Network::AddSocketToGroup(NetworkSocketGroup& group, NetworkSocket& s
{
if (group.Count >= SOCKGROUP_MAXCOUNT)
return -1;
pollfd pollinfo;
pollinfo.fd = *(SOCKET*)socket.Data;
pollinfo.events = POLLRDNORM | POLLWRNORM;
*(pollfd*)&group.Data[group.Count * SOCKGROUP_ITEMSIZE] = pollinfo;
group.Count++;
return group.Count - 1;
for(int i = 0; i < SOCKGROUP_MAXCOUNT; i++)
{
if (((pollfd*)&group.Data[i * SOCKGROUP_ITEMSIZE])->fd == -1)
{
*(pollfd*)&group.Data[i * SOCKGROUP_ITEMSIZE] = pollinfo;
group.Count++;
return i;
}
}
return -1;
}
bool Win32Network::GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, NetworkSocket* socket)
@@ -379,6 +388,29 @@ bool Win32Network::GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, N
return false;
}
void Win32Network::RemoveSocketFromGroup(NetworkSocketGroup& group, uint32 index)
{
if (((pollfd*)&group.Data[index * SOCKGROUP_ITEMSIZE])->fd != -1)
{
((pollfd*)&group.Data[index * SOCKGROUP_ITEMSIZE])->fd = -1;
group.Count--;
}
}
bool Win32Network::RemoveSocketFromGroup(NetworkSocketGroup& group, NetworkSocket& socket)
{
for(int i = 0; i < SOCKGROUP_MAXCOUNT; i++)
{
if (((pollfd*)&group.Data[i * SOCKGROUP_ITEMSIZE])->fd == *(SOCKET*)&socket.Data)
{
((pollfd*)&group.Data[i * SOCKGROUP_ITEMSIZE])->fd = -1;
group.Count--;
return false;
}
}
return true;
}
void Win32Network::ClearGroup(NetworkSocketGroup& group)
{
group.Count = 0;