diff -urN linux-2.4.20ctx-16/net/ipv4/af_inet.c linux-2.4.20ctx-16-jfap1/net/ipv4/af_inet.c --- linux-2.4.20ctx-16/net/ipv4/af_inet.c Mon Dec 30 03:14:25 2002 +++ linux-2.4.20ctx-16-jfap1/net/ipv4/af_inet.c Tue Dec 31 17:59:39 2002 @@ -323,6 +323,7 @@ struct sock *sk; struct list_head *p; struct inet_protosw *answer; + struct iproot_info *ip_info; sock->state = SS_UNCONNECTED; sk = sk_alloc(PF_INET, GFP_KERNEL, 1); @@ -396,7 +397,24 @@ sk->protinfo.af_inet.mc_list = NULL; sk->s_context = current->s_context; - sk->ip_info = NULL; + + ip_info = current->ip_info; + if (ip_info != NULL){ + int nbipv4 = ip_info->nbipv4; + __u32 ipv4root = ip_info->ipv4[0]; + if (nbipv4 > 1) { + sk->rcv_saddr = sk->saddr = 0; + sk->rcv_saddr2 = 0xffffffffl; + sk->ip_info = ip_info; + sys_assign_ip_info (ip_info); + } else { + sk->rcv_saddr = sk->saddr = ipv4root; + sk->rcv_saddr2 = 0xffffffffl; + sk->ip_info = NULL; + } + } else { + sk->ip_info = NULL; + } #ifdef INET_REFCNT_DEBUG atomic_inc(&inet_sock_nr);