use iocp for net worker waits instead of WSAPoll + dummy sockets

This commit is contained in:
jacob 2026-01-17 18:45:25 -06:00
parent 34c37417a9
commit cacdf10229
4 changed files with 517 additions and 509 deletions

View File

@ -3,6 +3,8 @@
#define NET_PacketSize 1024
#define NET_Ephemeral 0xFFFFFFFFFFFFFFFFull
////////////////////////////////////////////////////////////
//~ Opaque types

File diff suppressed because it is too large Load Diff

View File

@ -119,6 +119,18 @@ Struct(NET_W32_PeerBin)
Struct(NET_W32_Pipe)
{
//- IOCP data
OVERLAPPED ovl; // First field must be OVERLAPPED for cast from IOCP returns
i32 iocp_count; // How many overlapped operations are currently queued.
WSABUF recv_wsabuff;
struct sockaddr_in6 recv_addr;
i32 recv_addr_sz;
SOCKET udp;
//- Shared data
NET_W32_Pipe *next;
@ -139,6 +151,8 @@ Struct(NET_W32_Pipe)
//- Worker data
i64 last_attempted_bind_ns;
NET_W32_Peer *first_peer;
NET_W32_Peer *last_peer;
i64 num_msg_packets_received_this_frame;
@ -147,7 +161,6 @@ Struct(NET_W32_Pipe)
NET_W32_PeerBin *peer_bins;
u64 bound_port;
SOCKET udp;
};
////////////////////////////////////////////////////////////
@ -170,8 +183,7 @@ Struct(NET_W32_Ctx)
NET_W32_Peer *first_free_peer;
NET_W32_Packet *first_free_packet;
NET_W32_DummySocket wake_send_sock;
NET_W32_DummySocket wake_recv_sock;
HANDLE iocp;
};
extern NET_W32_Ctx NET_W32;
@ -186,6 +198,7 @@ struct sockaddr_in6 NET_W32_AddressFromKey(NET_Key key);
void NET_W32_SignalWorker(void);
NET_W32_Peer *NET_W32_TouchPeerFromKey(NET_W32_Pipe *pipe, NET_Key key);
u32 NET_W32_ChecksumFromPacketString(String str);
void NET_W32_PostRecv(NET_W32_Pipe *pipe);
////////////////////////////////////////////////////////////
//~ Worker

View File

@ -2651,6 +2651,8 @@ void V_TickForever(WaveLaneCtx *lane)
{
// V_PushNotif(Lit("Hello!!!"));
P_Msg *chat_msg = P_PushMsg(P_MsgKind_Chat, Lit("Hello!!!"));
} break;
}
}
@ -2670,7 +2672,6 @@ void V_TickForever(WaveLaneCtx *lane)
P_MsgList in_msgs = Zi;
{
NET_Bind(net_pipe, 0);
NET_MsgList net_msgs = NET_Swap(frame->arena, net_pipe);
for (NET_Msg *net_msg = net_msgs.first; net_msg; net_msg = net_msg->next)
{
@ -3847,7 +3848,8 @@ void V_TickForever(WaveLaneCtx *lane)
if (frame->held_buttons[Button_R] && !prev_frame->held_buttons[Button_R])
{
LogDebugF("Sending test payload");
NET_Push(net_pipe, server_key, STRING(P_TilesCount, predict_world->tiles), 0);
// NET_Push(net_pipe, server_key, STRING(P_TilesCount, predict_world->tiles), 0);
NET_Push(net_pipe, server_key, Lit("Hello there!"), 0);
}