Столкнулся с такой проблемой - после неправильного вызова socket, perror нормально выдает сообщение об ошибке, а strerror(errno) - говорит всё в порядке, оказалось что errno = 0.
status = sid = socket(AF_INET, 99, 0); // не правильный socket type perror("error"); // error: Socket type not supported cout << strerror(errno) << endl; // No error (errno = 0)
Может кто сталкивался - использую cygwin, хотя врядли это его особенности, скорее что-то упустил.