Простая реплика - в одном окне смотрим процессы сверху, в другом запускаем: nc -lkp 10000 > /dev/null & (head -50000000 /dev/urandom | nc -N 127.0.0.1 10000) & (head -50000000 /dev/urandom | nc -N 127.0.0.1 10000)
Обратите внимание, что только один главный
и нк
процесс активно использует ЦП.
Прикрепите strace к главный
который не активен - см., что он остановился при записи, например:
strace: процесс 589084 прикреплен
write(1, "\264\347\270\26\27\24'BRb^\353\302\36@\216\17V\210*n\252`\353\330\351\276\2\250 \330\350\217"..., 4096^Cstrace: процесс 589084 отсоединен
<отдельно...>
Настройте двух прослушивателей на разных портах - например. 10000 и 10001, и оба идут на полной скорости.
Это простой пример, но я могу воспроизвести его с другими входами и выходами, например. zcating большие файлы и отправка их в производственные службы по сети. Это не связано с вводом и не связано с прослушивающим сокетом.
Итак, почему я могу иметь только одно TCP-соединение с любым хостом/портом, активно отправляющим данные?
Есть независимый источник данных (не стесняйтесь экспериментировать, если не верите мне) и независимый процесс, открывающий собственное tcp-соединение (нетстат
покажет их обоих открытыми) - единственное, что их объединяет, это место назначения (которое не обязательно должно быть нк
слушаю вот
- бывает с чем угодно).
Учитывая, что пункт назначения может определенно иметь несколько входящих сокетов, получающих данные одновременно, а источник может определенно отправлять данные по нескольким сетевым сокетам одновременно, я изо всех сил пытаюсь понять, откуда исходит конфликт, в результате чего активен только один канал. однажды.