Исправление ошибок предупреждения - это хорошая идея - оно может помочь вам чувствовать себя лучше и, безусловно, уменьшит путаницу в сборке - но вряд ли решит существующую проблему, поэтому лучше оставить ее как внешнюю задачу для будущее.
Ошибка чтения сокета с 0 данными может означать, что сокет закрыт. Возможно, у вас есть проблема синхронизации, когда логика закрытия сокета приводит к одновременному доступу к некоторой общей структуре данных, которая не заблокирована должным образом. Внимательно посмотрите на код сокета, чтобы убедиться в правильности и герметичности блокировки. Убедитесь, что все возможные коды ошибок правильно обрабатываются в ваших вызовах API сокетов (Winsock, предположительно?). Вы можете быть уверены, что даже малейшее окно для одновременного доступа к контейнеру или «ошибки не могут быть» в конечном итоге попадут в вашу производственную среду. Я знаю, вы сказали, что приложение является однопоточным, но у Windows есть забавная привычка давать вам дополнительные потоки, которые вы сами не запускали, например, если вы используете службы DLL, которые сами запускают новые потоки.
Трудно, когда вы не можете получить хорошую производственную диагностику, но если вы можете сузить проблему до определенной области, попробуйте изолировать сбойный код в приложении модульного тестирования, которое имитирует использование в реальной жизни, и подчеркните, черт возьми об этом на вашем рабочем столе. У меня периодически возникали такие ошибки, что даже при большой нагрузке в специализированном тестовом приложении для решения проблемы требовались часы. Запуск в этом режиме (конечно же, выпуск сборки) в отладчике может выявить проблему быстрее, чем вы думаете.
Другим вариантом может быть установка Process Dumper на неисправном компьютере и указание ему выгрузить полный образ памяти (отлаживаемый в соответствии со стандартным файлом Windbg DMP) при нарушении прав доступа и выходе из процесса. Это может предоставить лучшую информацию, чем минимальная отладка. Если ваш клиент сотрудничает, он может дать указание создать дамп при следующей проблеме. Это самый близкий способ получить доступ к оперативной отладке, не находясь на компьютере или не имея удаленного доступа к нему.
Возможно, вы захотите создать дополнительную диагностику в логике закрытия сокета, чтобы проверить, является ли это непосредственной причиной возникновения ошибки.
Убедитесь, что операционная система вашего клиента и другое системное программное обеспечение обновлены со всеми необходимыми исправлениями. Возможно, это даже не ваша ошибка (хотя, похоже, что у вас есть ошибка, чтобы быть уверенным).