# does freebsd have a plan to support reuseport for load balancing?



## Yeatol (Jul 4, 2018)

```
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 pro‐
              cesses binding to the same address must have the same effec‐
              tive UID.  This option can be employed with both TCP and UDP
              sockets.
              For TCP sockets, this option allows accept(2) load distribu‐
              tion in a multi-threaded server to be improved by using a dis‐
              tinct 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 connec‐
              tions, 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_INCOMING_CPU (gettable since Linux 3.19, settable since Linux 4.4)
              Sets or gets the CPU affinity of a socket.  Expects an integer
              flag.
                  int cpu = 1;
                  setsockopt(fd, SOL_SOCKET, SO_INCOMING_CPU, &cpu, sizeof(cpu));
              Because all of the packets for a single stream (i.e., all
              packets for the same 4-tuple) arrive on the single RX queue
              that is associated with a particular CPU, the typical use case
              is to employ one listening process per RX queue, with the
              incoming flow being handled by a listener on the same CPU that
              is handling the RX queue.  This provides optimal NUMA behavior
              and keeps CPU caches hot.
```

reuseport can provide distribution of incoming udp datagrams to multiple cpu core, very important for udp server.


----------

