С учетом буферизации, использовавшейся в предыдущих публикациях для решения вопроса о том, отправляются ли данные, рассмотрите возможность захвата данных в строке, используя что-то вроде wireshark . Если отправляемые вами данные отображаются в строке, сервер их не получает.
В противном случае, если данные не поступают в строку, TCP может удерживать данные, чтобы избежать отправки одного сегмента с несколькими байтами в нем ( см. Алгоритм Nagle ). В зависимости от вашей ОС или поставщика TCP вы можете вести себя по-разному, но большинство стеков TCP поддерживают опцию TCP_NODELAY, которая может помочь вывести данные более своевременно.
tcp_client.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
Это может помочь при отладке, но, как правило, его не следует оставлять в рабочем коде, если пропускная способность имеет более высокий приоритет, чем отзывчивость.