Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/uipc_socket.c
Show First 20 Lines • Show All 1,959 Lines • ▼ Show 20 Lines | if (so->so_error) { | ||||
error = so->so_error; | error = so->so_error; | ||||
if ((flags & MSG_PEEK) == 0) | if ((flags & MSG_PEEK) == 0) | ||||
so->so_error = 0; | so->so_error = 0; | ||||
SOCKBUF_UNLOCK(&so->so_rcv); | SOCKBUF_UNLOCK(&so->so_rcv); | ||||
goto release; | goto release; | ||||
} | } | ||||
SOCKBUF_LOCK_ASSERT(&so->so_rcv); | SOCKBUF_LOCK_ASSERT(&so->so_rcv); | ||||
if (so->so_rcv.sb_state & SBS_CANTRCVMORE) { | if (so->so_rcv.sb_state & SBS_CANTRCVMORE) { | ||||
if (m == NULL && so->so_rcv.sb_tlsdcc == 0 && | if (m != NULL) | ||||
goto dontblock; | |||||
#ifdef KERN_TLS | |||||
else if (so->so_rcv.sb_tlsdcc == 0 && | |||||
so->so_rcv.sb_tlscc == 0) { | so->so_rcv.sb_tlscc == 0) { | ||||
#else | |||||
else { | |||||
#endif | |||||
SOCKBUF_UNLOCK(&so->so_rcv); | SOCKBUF_UNLOCK(&so->so_rcv); | ||||
goto release; | goto release; | ||||
} else | } | ||||
goto dontblock; | |||||
} | } | ||||
for (; m != NULL; m = m->m_next) | for (; m != NULL; m = m->m_next) | ||||
if (m->m_type == MT_OOBDATA || (m->m_flags & M_EOR)) { | if (m->m_type == MT_OOBDATA || (m->m_flags & M_EOR)) { | ||||
m = so->so_rcv.sb_mb; | m = so->so_rcv.sb_mb; | ||||
goto dontblock; | goto dontblock; | ||||
} | } | ||||
if ((so->so_state & (SS_ISCONNECTING | SS_ISCONNECTED | | if ((so->so_state & (SS_ISCONNECTING | SS_ISCONNECTED | | ||||
SS_ISDISCONNECTING | SS_ISDISCONNECTED)) == 0 && | SS_ISDISCONNECTING | SS_ISDISCONNECTED)) == 0 && | ||||
▲ Show 20 Lines • Show All 2,412 Lines • Show Last 20 Lines |