Day45-46 - Linux Network Programming (Event-driven TCP Server)¶
📌 Overview¶
This chapter covers Linux TCP socket programming and evolves from a blocking server to a fully event-driven non-blocking server.
Key progression:
📌 Socket Programming Basics¶
Core APIs:
📌 poll vs epoll¶
poll¶
- user provides fd list every call
- O(N) scan
- simple but inefficient
epoll¶
- kernel maintains ready list
- scalable
- only returns active fds
📌 Blocking vs Non-blocking¶
Blocking¶
Non-blocking¶
📌 Event-driven Model¶
Design rule:
- never block inside event loop
📌 accept Queue Handling¶
Non-blocking accept must drain queue:
📌 recv Handling (Non-blocking)¶
📌 TCP is Stream (Important)¶
- no message boundary
- partial send/recv possible
📌 TX Queue Design¶
TX queue is NOT a packet FIFO.
Correct model:
Example:
📌 EPOLLOUT Strategy¶
EPOLLOUT should NOT always be enabled.
Correct behavior:
📌 Why TX Queue is Needed¶
Because:
So remaining data must be stored.
📌 Design Principles¶
- event loop must not block
- separate RX and TX flow
- dynamically control EPOLLOUT
- handle partial I/O