Что означает recv, вернувший ноль
Сервер обслуживает TCP-соединение в цикле. Очередной вызов recv на блокирующем сокете возвращает ровно 0.
Что это означает и что делать дальше?
- Данных пока нет: вызов нужно просто повторить позже, соединение при этом остаётся полностью рабочим
- Произошла ошибка ввода-вывода: её конкретный код нужно смотреть в errno и уже по нему решать, что делать дальше
- Противоположная сторона закрыла соединение: новых данных не будет, сокет пора закрывать и убирать из набора
- Переполнен буфер приёма сокета, из-за этого вызов и вернул ноль — размер буфера надо увеличить
