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

@@ -77,6 +77,11 @@ int32 NetworkBase::AddSocketToGroup(NetworkSocketGroup& group, NetworkSocket& so
return -1;
}
bool NetworkBase::GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, NetworkSocket* socket)
{
return true;
}
void NetworkBase::ClearGroup(NetworkSocketGroup& group)
{
group.Count = 0;

View File

@@ -227,6 +227,16 @@ public:
/// <returns>Returns the socket index in group or -1 on error.</returns>
static int32 AddSocketToGroup(NetworkSocketGroup& group, NetworkSocket& socket);
/// <summary>
/// Gets a socket by index.
/// Some data like socket IPVersion might be undefined.
/// </summary>
/// <param name="group">The group.</param>
/// <param name="index">The index.</param>
/// <param name="socket">The returned socket.</param>
/// <returns>Returns true on error, otherwise false.</returns>
static bool GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, NetworkSocket* socket);
/// <summary>
/// Clears the socket group.
/// </summary>

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);