Запись в сокет всегда будет намного быстрее, чем чтение в этом случае, потому что запись локальна для машины, и чтение должно ждать ответа по сети.
Более подробно, когда вызов write / send возвращает все, что система говорит вам, что N байтов были успешно скопированы в буфер пространства ядра сокетов. Это не означает, что данные фактически были отправлены по сети. На самом деле, данные могут храниться в буфере сокета довольно долго (при условии, что вы используете TCP). Это из-за того, что называется алгоритмом Nagle , который предназначен для эффективного использования пропускной способности сети. Эта невидимая задержка Нэгла увеличивает время прохождения туда и обратно и как долго вы получите ответ. Сервер также может задержать ответ по той же причине, увеличивая время отклика.
Так что когда вы пишете время и оно быстро возвращается, это на самом деле ничего не значит.
Как упоминалось ранее, чтение из сокета будет намного дольше, поскольку, когда вы измеряете время чтения, вы фактически синхронизируете время прохождения туда-обратно плюс время отклика сервера, которое всегда будет намного медленнее, чем время, необходимое для копирования данные из программы пространства пользователя в буфер ядра.
Что вы на самом деле пытаетесь измерить и почему?