well structured and mostly easy to read
I chose to review this book because it covers two subjects I am interested in, namely Linux and networks. My initial impression was that it was rather a thin book to be called a "Definitive Guide". Could it live up to my expectations in just 375 pages?
It is divided into three parts. Part one starts with the fundamentals of network protocols and socket programming. Chapter one is a concise and yet easy to read introduction to TCP/IP down to the byte level of the packet headers. The basic system functions and data structures are described as they are used in the next two chapters.
Part two is about the design and architecture of client-server programs. The different methods of handling multiple simultaneous clients are described, e.g. forking and multithreading. Simple client-server programs are developed which leads onto developing a custom network application, a chat server. All the design decisions for a custom protocol and the implementation of the chat server and a GUI client are described in the next four chapters. There is also a section on the debugging and development cycle.
Part three deals with security. It starts by explaining tunnelling, OpenSSH and the Public Key Infrastructure (PKI). It then illustrates the many library functions in the OpenSSL toolkit with short code fragments.
Chapter 12 covers common security problems, the techniques hackers use to compromise systems and the methods we can use to make then more secure. This leads onto the second case study for a secure networked application, an authentication server. This brings together many of the concepts in the previous chapters.
Finally, the appendix gives a brief insight into IPv6 and converts a simple server and client.
Overall, this book is well structured and mostly easy to read and I could find little fault with the technical content. It is a very good introduction into network programming but I still question the use of "Definitive" in the title. There is scope to expand the later chapters with more examples as these are the most difficult to follow.
The quality of the source code was usually very good. There were a few elementary errors in some of the worked examples and the server program of the first case study would not compile.
Apart from these slight reservations, I would recommend this book to anyone interested in this area of programming