struct sock sk;
        struct tipc_port *p;
        struct tipc_portid peer_name;
+       long conn_timeout;
 };
 
 #define tipc_sk(sk) ((struct tipc_sock *)(sk))
        sock->state = state;
 
        sock_init_data(sock, sk);
-       sk->sk_rcvtimeo = msecs_to_jiffies(CONN_TIMEOUT_DEFAULT);
        sk->sk_backlog_rcv = backlog_rcv;
        tipc_sk(sk)->p = tp_ptr;
+       tipc_sk(sk)->conn_timeout = msecs_to_jiffies(CONN_TIMEOUT_DEFAULT);
 
        spin_unlock_bh(tp_ptr->lock);
 
        struct msghdr m = {NULL,};
        struct sk_buff *buf;
        struct tipc_msg *msg;
+       long timeout;
        int res;
 
        lock_sock(sk);
 
        /* Wait until an 'ACK' or 'RST' arrives, or a timeout occurs */
 
+       timeout = tipc_sk(sk)->conn_timeout;
        release_sock(sk);
        res = wait_event_interruptible_timeout(*sk_sleep(sk),
                        (!skb_queue_empty(&sk->sk_receive_queue) ||
                        (sock->state != SS_CONNECTING)),
-                       sk->sk_rcvtimeo);
+                       timeout ? timeout : MAX_SCHEDULE_TIMEOUT);
        lock_sock(sk);
 
        if (res > 0) {
                res = tipc_set_portunreturnable(tport->ref, value);
                break;
        case TIPC_CONN_TIMEOUT:
-               sk->sk_rcvtimeo = msecs_to_jiffies(value);
+               tipc_sk(sk)->conn_timeout = msecs_to_jiffies(value);
                /* no need to set "res", since already 0 at this point */
                break;
        default:
                res = tipc_portunreturnable(tport->ref, &value);
                break;
        case TIPC_CONN_TIMEOUT:
-               value = jiffies_to_msecs(sk->sk_rcvtimeo);
+               value = jiffies_to_msecs(tipc_sk(sk)->conn_timeout);
                /* no need to set "res", since already 0 at this point */
                break;
         case TIPC_NODE_RECVQ_DEPTH: