This chapter builds on all the knowledge you've obtained throughout this book.
Socket programming can be complicated. There are many pitfalls to avoid and subtle programming techniques to implement. In this chapter, we consider some nuanced details of network programming that are essential for writing robust programs.
The following topics are covered in this chapter:
- Error handling and error descriptions
- TCP handshakes and orderly release
- Timeout on connect()
- Preventing TCP deadlocks
- TCP flow control
- Avoiding address-in-use errors
- Preventing SIGPIPE crashes
- Multiplexing limitations of select()