The connection migration path transfers a protocol name and a connected
socket descriptor over a local socketpair.
The protocol name is currently transmitted using send(2), while the
descriptor is transmitted using a separate sendmsg(2) call carrying
SCM_RIGHTS ancillary data. The receiver expects both pieces of information
to arrive together and uses a receive buffer sized for the maximum
protocol name length.
On FreeBSD 15 this can cause the receive side to block indefinitely,
preventing the migrated connection from being delivered to the worker
process. As a result, the primary node never sends the HAST protocol
header and the secondary node times out waiting for it.
Transmit the protocol name and descriptor together using a single
sendmsg(2) operation and receive them using a single recvmsg(2)
operation.