#define SOCK_XFER_OPT_FOREIGN 0x000000001
#define SOCK_XFER_OPT_V6ONLY 0x000000002
+#define SOCK_XFER_OPT_DGRAM 0x000000004
/* The list used to transfer sockets between old and new processes */
struct xfer_sock_list {
if (sock_inet_is_foreign(fd, xfer_sock->addr.ss_family))
xfer_sock->options |= SOCK_XFER_OPT_FOREIGN;
+ socklen = sizeof(val);
+ if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &val, &socklen) == 0 && val == SOCK_DGRAM)
+ xfer_sock->options |= SOCK_XFER_OPT_DGRAM;
+
#if defined(IPV6_V6ONLY)
/* keep only the v6only flag depending on what's currently
* active on the socket, and always drop the v4v6 one.
if (!l->proto->addrcmp)
return -1;
+ /* WT: this is not the right way to do it, it is temporary for the
+ * transition to receivers.
+ */
+ if (l->addr.ss_family == AF_CUST_UDP4 || l->addr.ss_family == AF_CUST_UDP6)
+ options |= SOCK_XFER_OPT_DGRAM;
+
if (l->options & LI_O_FOREIGN)
options |= SOCK_XFER_OPT_FOREIGN;