LINUX.ORG.RU

История изменений

Исправление leonopulos, (текущая версия) :

У меня там процесс один, а потоки разные. И каждый занимается своим делом. А то, что данные смешанные - это разработчик оборудования так сделал. Да, я уже думаю, как сделать. Наверно придется открывать один порт и рассылать пакеты в разные потоки pipe-ми. Но меня вот это описание смущает на SO_REUSEPORT:

SO_REUSEPORT (since Linux 3.9) Permits multiple AF_INET or AF_INET6 sockets to be bound to an identical socket address. This option must be set on each socket (including the first socket) prior to calling bind(2) on the socket. To prevent port hijacking, all of the processes binding to the same address must have the same effective UID. This option can be employed with both TCP and UDP sockets.

For TCP sockets, this option allows accept(2) load distribution in a multi-threaded server to be improved by using a distinct listener socket for each thread. This provides improved load distribution as compared to traditional techniques such using a single accept(2)ing thread that distributes connections, or having multiple threads that compete to accept(2) from the same socket.

For UDP sockets, the use of this option can provide better distribution of incoming datagrams to multiple processes (or threads) as compared to the traditional technique of having multiple processes compete to receive datagrams on the same socket.

Там четко сказано, что именно порт можно шарить. Я добавил SO_REUSEPORT в настройки порта в обоих пакетах, но select() на 2-м порту все равно молчит.

Исходная версия leonopulos, :

У меня там процесс один, а потоки разные. И каждый занимается своим делом. А то, что данные смешанные - это разработчик оборудования так сделал. Да, я уже думаю, как сделать. Наверно придется открывать один порт и рассылать пакеты в разные потоки pipe-ми. Но меня вот это описание смущает на SO_REUSEPORT:

SO_REUSEPORT (since Linux 3.9) Permits multiple AF_INET or AF_INET6 sockets to be bound to an identical socket address. This option must be set on each socket (including the first socket) prior to calling bind(2) on the socket. To prevent port hijacking, all of the processes binding to the same address must have the same effective UID. This option can be employed with both TCP and UDP sockets.

          For TCP sockets, this option allows accept(2) load
          distribution in a multi-threaded server to be improved by
          using a distinct listener socket for each thread.  This
          provides improved load distribution as compared to
          traditional techniques such using a single accept(2)ing
          thread that distributes connections, or having multiple
          threads that compete to accept(2) from the same socket.

          For UDP sockets, the use of this option can provide better
          distribution of incoming datagrams to multiple processes
          (or threads) as compared to the traditional technique of
          having multiple processes compete to receive datagrams on
          the same socket.

Там четко сказано, что именно порт можно шарить. Я добавил SO_REUSEPORT в настройки порта в обоих пакетах, но select() на 2-м порту все равно молчит.