Whether you just want to learn the concepts and practices that allow network programming to work or want to polish your skills in this area, The Definitive Guide to Linux Network Programming will serve you well. I have rarely seen a book about programming that managed to bridge the gap between newcomer and expert so well.
The authors clearly aimed this book for those who are programmers, yet they have made it accessible even to those who are not. Depending on how much you know about network programming, you can start at different points in the book. The authors kindly make suggestions in the introduction as to which sections are most relevant for those who are more expert already.
I was very impressed by the extensive amount of code that is included. In many cases, you will be able to program simply by using the examples in the book. That resource is nicely extended by two lengthy case studies that are intended to help you think your way through the process as well as to integrate the book's subjects. The first case study is for a networked chat application that is written in C++. The second case study looks at the many tricky security questions associated with any networked application.
The book is filled with guidelines and suggestions for when to favor which approaches among the many that Linux offers you. I was especially pleased to find out about many development and debugging tools that make the job easier.
Here's the book's structure:
Part One deals with the basics (networks, protocols, functions, socket programming, sessions and state). Part Two looks at design and architecture (emphasizing design decisions and development processes). Part Three is devoted to security.
Reading the book reminded me of what a great gift Linux is to us all in making it easier for us to use computer networks to communicate with one another. I kept shaking my head as I read the book trying to imagine how much more limited a book would have been that did not use Linux as its subject.
I thought that the discussions of security management were the best part of the book. They were clear, provided a good conceptual backdrop for the potential solutions, and made the solutions as simple as possible.
If you plan to do network programming with Linux, you owe it to yourself to read and apply this superb book!