EWOULDBLOCK/EAGAIN означает, что данные не могли быть отправлены сразу же. Нам нужно больше деталей о Вашем коде для понимания этого.
Я не разработчик, но я предлагаю, чтобы Вы попытались заменить не блокирующиеся сокеты мультиплексором ввода-вывода: выберите или опросите или/dev/poll и проверка, если сокет готов к записи. Это могло бы изменить поведение Вашей программы к лучшему, или в худшем случае дают Вам больше отладки и подсказок о настоящей проблеме.
На таких больших расстояниях все пакеты, вероятно, используют различные маршруты, идя, хотя другой AS, таким образом, никто не может действительно оценить качество сети. Пакет может занять много времени, чтобы прибыть и быть подтвержденным из-за проблемы где-нибудь глубоко в Интернете (это, вероятно, рядом, хотя, иначе люди сообщили бы об этом и зафиксировали бы его), попытайтесь присоединиться из/в другие местоположения. Если единственный пакет займет много времени, чтобы быть подтвержденным, то окно TCP застрянет, и дальнейшие данные не могут быть обработаны. Можно хотеть попытаться настроить размер окна TCP на более высокое значение.
Дополнительно можно просто выполнить mtr для быстрой проверки качества сети. Выполняйте его несколько раз, поскольку пакеты могут взять различные пути.
Надеюсь, что это помогло, так или иначе:/