Если вы используете блокирующие сокеты, посмотрите, как настроить тайм-ауты отправки() и recv() с параметрами SO_SNDTIMEO и SO_RCVTIMEO setsockopt().
Существует множество небольших сложностей при создании надлежащего сервера, я бы посмотрел на приобретение, попрошайничество, заимствование или кража этого. Вот sample multithreaded socket server.
Также, если у вас есть контроль над обеими сторонами (программное обеспечение для сокетов клиента и сервера), я бы создал протокол, длина которого должна быть передана в качестве первых 2 или 4 байта сообщения, таким образом, вы просто нужно заблокировать это декодирование номера и продолжить чтение до тех пор, пока количество байтов не исчезнет. Сделайте это как для клиента, так и для сервера, и это сделает ваш код намного проще.
да, я хочу знать, пользуюсь ли recv(), может ли это привести к DoS? Поскольку сервер может долго ждать его. Например, если размер моего сообщения очень большой. – mousey
Обратите внимание, что можно установить тайм-аут в сокете и максимальный размер буфера на recv, поэтому возможности для злоупотреблений могут быть ограничены. Я думаю, если у вас есть один процесс, нежелательный сверстник может отправить вам много байтов медленно, так как атака отказа в обслуживании ... – MZB