Объяснение
read и write могут обработать меньше байтов, чем запрошено. Сокет — поток байтов, а не поток сообщений. Протоколу нужны длина, разделитель или другая схема определения границ.
Задача для самостоятельного решения
Клиент отправил 100 байтов, read вернул 40. Это ошибка?
Показать разбор ответа
Не обязательно. Нужно продолжить чтение до требуемой длины, EOF или ошибки. Один write отправителя не соответствует одному read получателя.