I am going to go out on a limb and make the assumption that we are talking about windows.
first things first, your code that handles the sockets should be able to pass SOCKET_ERROR back to your app by itself or what ever error you are looking for or even sending a fail message to your monitoring proc/thread. If you are running into the case where blocking calls are hanging then you should be using asynchornous sockets/calls.
Secondly you can always use the winsock select function to query your sockets ^
usefull when looking for timeouts or failures on blocking calls from which you can cancel the connection if you need to.
The questions you should be asking youself are:
What are you really after why are you considering a monitoring package?
Did you design you networking functions/classes correctly?
Are you able to handle errors without needing to look in from the outside?