As we said previously, a socket is created in blocking mode by default. A server in blocking mode is synchronous in the sense that each read and write call on the socket blocks and waits until it is complete. If another client tries to connect to the server, it needs to wait until the server is done serving the previous client. This is to say that until the TCP read and write buffers are full, your application blocks on the respective I/O operation and any new client connections must wait until the buffers are empty and full again.
The TCP protocol implementation contains its own read and write buffers on the kernel level, apart from the application maintaining any buffers of its own.
Rust's standard library networking primitives provide the same synchronous API for sockets. To see this model in action, we'll implement something more than an...