Linux Network Programming培训
Sockets
Creating datagram sockets
Receiving and sending data
Creating and accepting TCP connections
Closing sockets
Handling errors
Handling more than one client in a simple way
Prefork model, as found in Apache
Forking a new process per client
Cleaning up after finished processes
Threads
Inetd, systemd units
Waiting for data
Blocking sockets
Non-blocking sockets and select
Select as a way to wait for "any of these sockets"
Organizing reads and writes
Dealing with short reads and writes
Reading up to a delimiter
Pipelined requests
Application-level buffers
Event-driven architecture
Using select for multiplexing all client connections in one thread
State machines
Callback hell
Event libraries
"Green" threads
Problem of 10000 connections
Problems with prefork model and select-based loop
poll as an alternative to select
Realtime signals and why you shouldn't use them
Epoll (linux) and kqueue (BSD)
Why and when epoll and kqueue are faster than poll/select
Timeouts and timers
SIGALARM
Timeout as a select argument
A simple case of all-equal timeouts
Priority queue as an abstract data stracture
Binary heap as a priority queue implementation
Timer wheel
timerfd
Integration with the operating system
Traditional daemons
Systemd socket activation
Logging
Handling signals
Performance and scalability optimizations
Choosing the right architecture
Setting socket options