Если вы запустите клиент и сервер на одной и той же машине, они будут взаимодействовать через интерфейс обратной связи, поэтому отключение или отключение интерфейса исходящей сети ничего не изменит. Ваш сервер и клиент счастливо общаются друг с другом. Если действительно нет никакого соединения между сервером и клиентом, connect()
должен был произойти сбой с errno, установленным в ENETUNREACH
или ECONNREFUSED
, если сервер отказывает в соединении. Так что вы, вероятно, хотите, чтобы клиент работал на вашем компьютере, а сервер - на другом компьютере или в виртуальной машине с мостовой сетью. Обратите внимание, что write()
успешный возврат означает только то, что байты буферизируются для отправки. Он может даже вернуть меньше байтов, чем содержится в вашем сообщении, указывая на то, что буфер в настоящее время заполнен, и вам нужно попытаться отправить оставшиеся байты позже.
Лучший способ проанализировать реализации протокола - это использовать инструмент, такой как wireshark, чтобы увидеть, какие пакеты действительно отправляются по проводам (или через интерфейс обратной связи).