Многие функции будут вызывать SetLastError
как побочный эффект при выполнении своей работы.Обычно это означает, что функция вызывает какую-то другую функцию, которая может иметь некоторый внутренний сбой, для которого она может вызвать SetLastError
, и поэтому предыдущее значение ошибки перезаписывается.
Например, вполне вероятно, что что-тоВызванный функцией Log
вызывает что-то, что устанавливает ERROR_INSUFFICIENT_BUFFER
, обрабатывает эту ошибку и возвращает успех.Результат?Несмотря на то, что ваш код не был ошибочным в более широком смысле, значение вашей ошибки забито.
При сбое функций Win32 необходимо позаботиться о том, чтобы вызвать GetLastError
, прежде чем вызывать слишком много несвязанного кода.
Обновление: Я бы тоже прочитал ссылку в комментарии.Кроме того, читая ваш код, где написано «Failed», за которым следуют 0 кодов ошибок, я думаю, вероятно, что происходит, когда другой конец закрыл сокет (то есть recv
вернул 0).