sk->sk_protocol = protocol;
        pn = pn_sk(sk);
        pn->sobject = 0;
+       pn->dobject = 0;
        pn->resource = 0;
        sk->sk_prot->init(sk);
        err = 0;
        struct net_device *dev;
        struct pn_sock *pn = pn_sk(sk);
        int err;
-       u16 src;
-       u8 daddr = pn_sockaddr_get_addr(target), saddr = PN_NO_ADDR;
+       u16 src, dst;
+       u8 daddr, saddr, res;
+
+       src = pn->sobject;
+       if (target != NULL) {
+               dst = pn_sockaddr_get_object(target);
+               res = pn_sockaddr_get_resource(target);
+       } else {
+               dst = pn->dobject;
+               res = pn->resource;
+       }
+       daddr = pn_addr(dst);
 
        err = -EHOSTUNREACH;
        if (sk->sk_bound_dev_if)
        if (saddr == PN_NO_ADDR)
                goto drop;
 
-       src = pn->sobject;
        if (!pn_addr(src))
                src = pn_object(saddr, pn_obj(src));
 
-       err = pn_send(skb, dev, pn_sockaddr_get_object(target),
-                       src, pn_sockaddr_get_resource(target), 0);
+       err = pn_send(skb, dev, dst, src, res, 0);
        dev_put(dev);
        return err;
 
 
 
                seq_printf(seq, "%2d %04X:%04X:%02X %02X %08X:%08X %5d %lu "
                        "%d %p %d%n",
-                       sk->sk_protocol, pn->sobject, 0, pn->resource,
-                       sk->sk_state,
+                       sk->sk_protocol, pn->sobject, pn->dobject,
+                       pn->resource, sk->sk_state,
                        sk_wmem_alloc_get(sk), sk_rmem_alloc_get(sk),
                        sock_i_uid(sk), sock_i_ino(sk),
                        atomic_read(&sk->sk_refcnt), sk,