The book is very good for touching on quite a few topics in Network programming and doing so in a concise way. However, when reading the book I often felt as if I wasn't learning socket programming so much as learning how to access Steven's personal API to socket programming. When Stevens introduces a new concept he will immediately afterwords introduce a wrapper function that he uses to do it 'correctly'. From then on he will continue to use this wrapper function throughout the rest of the book whenever he needs to use the stanard library function. In fact, in any 10 lines of source in the book it seems like there will be 7 wrapper functions. This of course makes it very hard to use the book as a reference unless you are resigned to using Steven's wrapper library in all of your projects. In several cases, when attempting to reference some concept I ended up flipping through several pages in different chapters to look up definitions and prototypes for these functions in different place, and then diging deeper into the function to decipher what was going on. All I really wanted was a quick answer to a specific question concerning a socket. I can't deny that what he ends up with is a nicely done system for working with sockets, but I don't feel a general programming text should take this approach. I'll be shopping for a different socket book to use as a desk reference.