siw_cep_put(cep);
                        new_cep->listen_cep = NULL;
                        if (rv) {
+                               siw_cancel_mpatimer(new_cep);
                                siw_cep_set_free(new_cep);
                                goto error;
                        }
                                /*
                                 * Socket close before MPA request received.
                                 */
-                               siw_dbg_cep(cep, "no mpareq: drop listener\n");
-                               siw_cep_put(cep->listen_cep);
-                               cep->listen_cep = NULL;
+                               if (cep->listen_cep) {
+                                       siw_dbg_cep(cep,
+                                               "no mpareq: drop listener\n");
+                                       siw_cep_put(cep->listen_cep);
+                                       cep->listen_cep = NULL;
+                               }
                        }
                }
                release_cep = 1;
        if (!cep)
                goto out;
 
-       siw_dbg_cep(cep, "state: %d\n", cep->state);
+       siw_dbg_cep(cep, "cep state: %d, socket state %d\n",
+                   cep->state, sk->sk_state);
+
+       if (sk->sk_state != TCP_ESTABLISHED)
+               goto out;
 
        switch (cep->state) {
        case SIW_EPSTATE_RDMA_MODE: