There are four major places to look for software libraries/components before you resort to writing your own. The first place to look is the C++ Standard Library. The components provided by that are excellent if not perfect and have the advantage of being highly portable. As long as they do what you need with adequate performance (both speed and code footprint) then there is little reason to look elsewhere.
The second place to look is
www.boost.orgwhere you will find components that are as close to the C++ Standard as you can get without actually being in it. This should surprise no one because they are designed and developed by those responsible for the Standard Library + a good number of other experts including domain experts who ensure that the designs meet real needs and are correct for those needs.
The fourth place to look is at commercial libraries. Unfortunately the quality of those is highly variable because even the best have relatively small design teams coupled with too little oversight from other designers, domain experts and users. There are outstanding exceptions to this represented by such companies as NAG (Numerical Algorithms Group) and their maths libraries that have been under continuous development for more than two decades.
So what is in third place? Open Source software. This category of software ensures that many eyes have looked at it and added their observations. Bugs and design faults get spotted and corrected. There are two main problems with Open Source components. The first is that they tend to be based on the lowest common denominator of a range of available compilers and older idioms. There is nothing wrong in that except that language enthusiasts can often point to ways in which it could have been done better if designed for the latest systems. That also requires that the designs often require that the user learn a somewhat different interface style to that they find in the C++ Standard Library and in the Boost libraries. The second problem is that documentation is often neglected.
C++ Network Programming Volume 1 set out to address the second issue as regards ACE (the Adaptive Communication Environment). This second volume looks at various important aspects of ACE that are featured by its multiple frameworks. Each of the main frameworks is described in terms of its design and the patterns used.
This book helps you understand how ACE is designed to work. However it achieves more than this because it provides excellent working examples of various patterns that are described elsewhere (for example in Pattern-Oriented Software Development, which is co-authored by one of the co-authors of this book). That means that as well as being a book about the higher level architectural features of ACE it is also a book showing such high level design in practice.
There are a multitude of things about ACE that irritate me (for example its naming conventions) but that does not detract from the fact that it is a well designed framework library that provides the components needed by those writing middleware for networking. If you have a need to write software in this domain then you should know about ACE and, in order to make best use of it, understand its design. This book will help you achieve that latter objective while educating you about general framework design.
I could envisage using it as one of several textbooks for a course on software design, as well as a text for those who use or wish to use ACE in their professional work. I think it would also provide an excellent resource for those studying the use of patterns in software design. There is a sense in which this volume is the practical that goes alongside the theory presented in Pattern-Oriented Software Development.
Highly recommended for those in its target readership and recommended for those studying patterns and framework design.