also pass the errno and error string to Exception's __init__()
so we can print them all using str(err). otherwise str(err) will only
print out the errorstr, and the type information is lost. for example,
if ping_monitor() raises an exception, all we get is an error of: