Lines Matching refs:so

126 	struct socket *so;  in kttcp_send()  local
134 if ((error = fd_getsock(kio->kio_socket, &so)) != 0) in kttcp_send()
140 error = kttcp_sosend(so, len, &done, l, 0); in kttcp_send()
159 struct socket *so; in kttcp_recv() local
169 if ((error = fd_getsock(kio->kio_socket, &so)) != 0) in kttcp_recv()
174 error = kttcp_soreceive(so, len, &done, l, NULL); in kttcp_recv()
198 kttcp_sosend(struct socket *so, unsigned long long slen, in kttcp_sosend() argument
206 atomic = sosendallatonce(so); in kttcp_sosend()
221 (flags & MSG_DONTROUTE) && (so->so_options & SO_DONTROUTE) == 0 && in kttcp_sosend()
222 (so->so_proto->pr_flags & PR_ATOMIC); in kttcp_sosend()
225 solock(so); in kttcp_sosend()
227 if ((error = sblock(&so->so_snd, SBLOCKWAIT(flags))) != 0) in kttcp_sosend()
230 if (so->so_state & SS_CANTSENDMORE) in kttcp_sosend()
232 if (so->so_error) { in kttcp_sosend()
233 error = so->so_error; in kttcp_sosend()
234 so->so_error = 0; in kttcp_sosend()
237 if ((so->so_state & SS_ISCONNECTED) == 0) { in kttcp_sosend()
238 if (so->so_proto->pr_flags & PR_CONNREQUIRED) { in kttcp_sosend()
244 space = sbspace(&so->so_snd); in kttcp_sosend()
247 if ((atomic && resid > so->so_snd.sb_hiwat)) in kttcp_sosend()
249 if (space < resid && (atomic || space < so->so_snd.sb_lowat)) { in kttcp_sosend()
250 if (so->so_state & SS_NBIO) in kttcp_sosend()
252 SBLASTRECORDCHK(&so->so_rcv, in kttcp_sosend()
254 SBLASTMBUFCHK(&so->so_rcv, in kttcp_sosend()
256 sbunlock(&so->so_snd); in kttcp_sosend()
257 error = sbwait(&so->so_snd); in kttcp_sosend()
264 sounlock(so); in kttcp_sosend()
315 solock(so); in kttcp_sosend()
317 if (so->so_state & SS_CANTSENDMORE) in kttcp_sosend()
320 so->so_options |= SO_DONTROUTE; in kttcp_sosend()
322 so->so_state |= SS_MORETOCOME; in kttcp_sosend()
324 error = (*so->so_proto->pr_usrreqs->pr_sendoob)(so, in kttcp_sosend()
327 error = (*so->so_proto->pr_usrreqs->pr_send)(so, in kttcp_sosend()
330 so->so_options &= ~SO_DONTROUTE; in kttcp_sosend()
332 so->so_state &= ~SS_MORETOCOME; in kttcp_sosend()
341 sbunlock(&so->so_snd); in kttcp_sosend()
343 sounlock(so); in kttcp_sosend()
353 kttcp_soreceive(struct socket *so, unsigned long long slen, in kttcp_soreceive() argument
362 pr = so->so_proto; in kttcp_soreceive()
372 solock(so); in kttcp_soreceive()
373 error = (*pr->pr_usrreqs->pr_recvoob)(so, m, flags & MSG_PEEK); in kttcp_soreceive()
374 sounlock(so); in kttcp_soreceive()
387 solock(so); in kttcp_soreceive()
389 if ((error = sblock(&so->so_rcv, SBLOCKWAIT(flags))) != 0) in kttcp_soreceive()
391 m = so->so_rcv.sb_mb; in kttcp_soreceive()
404 so->so_rcv.sb_cc < resid) && in kttcp_soreceive()
405 (so->so_rcv.sb_cc < so->so_rcv.sb_lowat || in kttcp_soreceive()
406 ((flags & MSG_WAITALL) && resid <= so->so_rcv.sb_hiwat)) && in kttcp_soreceive()
409 if (m == NULL && so->so_rcv.sb_cc) in kttcp_soreceive()
412 if (so->so_error) { in kttcp_soreceive()
415 error = so->so_error; in kttcp_soreceive()
417 so->so_error = 0; in kttcp_soreceive()
420 if (so->so_state & SS_CANTRCVMORE) { in kttcp_soreceive()
428 m = so->so_rcv.sb_mb; in kttcp_soreceive()
431 if ((so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)) == 0 && in kttcp_soreceive()
432 (so->so_proto->pr_flags & PR_CONNREQUIRED)) { in kttcp_soreceive()
438 if ((so->so_state & SS_NBIO) || in kttcp_soreceive()
443 sbunlock(&so->so_rcv); in kttcp_soreceive()
444 error = sbwait(&so->so_rcv); in kttcp_soreceive()
446 sounlock(so); in kttcp_soreceive()
461 KASSERT(m == so->so_rcv.sb_mb); in kttcp_soreceive()
462 SBLASTRECORDCHK(&so->so_rcv, "kttcp_soreceive 1"); in kttcp_soreceive()
463 SBLASTMBUFCHK(&so->so_rcv, "kttcp_soreceive 1"); in kttcp_soreceive()
474 sbfree(&so->so_rcv, m); in kttcp_soreceive()
475 m = so->so_rcv.sb_mb = m_free(m); in kttcp_soreceive()
482 sbfree(&so->so_rcv, m); in kttcp_soreceive()
483 m = so->so_rcv.sb_mb = m_free(m); in kttcp_soreceive()
502 KASSERT(so->so_rcv.sb_mb == m); in kttcp_soreceive()
503 so->so_rcv.sb_lastrecord = m; in kttcp_soreceive()
511 KASSERT(so->so_rcv.sb_mb == m); in kttcp_soreceive()
512 so->so_rcv.sb_mb = nextrecord; in kttcp_soreceive()
513 SB_EMPTY_FIXUP(&so->so_rcv); in kttcp_soreceive()
516 SBLASTRECORDCHK(&so->so_rcv, "kttcp_soreceive 2"); in kttcp_soreceive()
517 SBLASTMBUFCHK(&so->so_rcv, "kttcp_soreceive 2"); in kttcp_soreceive()
531 so->so_state &= ~SS_RCVATMARK; in kttcp_soreceive()
533 if (so->so_oobmark && len > so->so_oobmark - offset) in kttcp_soreceive()
534 len = so->so_oobmark - offset; in kttcp_soreceive()
554 sbfree(&so->so_rcv, m); in kttcp_soreceive()
558 so->so_rcv.sb_mb = m = m->m_next; in kttcp_soreceive()
561 m = so->so_rcv.sb_mb = m_free(m); in kttcp_soreceive()
567 KASSERT(so->so_rcv.sb_mb == m); in kttcp_soreceive()
571 so->so_rcv.sb_lastrecord = m; in kttcp_soreceive()
573 so->so_rcv.sb_mb = nextrecord; in kttcp_soreceive()
574 SB_EMPTY_FIXUP(&so->so_rcv); in kttcp_soreceive()
576 SBLASTRECORDCHK(&so->so_rcv, in kttcp_soreceive()
578 SBLASTMBUFCHK(&so->so_rcv, in kttcp_soreceive()
586 sounlock(so); in kttcp_soreceive()
588 solock(so); in kttcp_soreceive()
592 so->so_rcv.sb_cc -= len; in kttcp_soreceive()
595 if (so->so_oobmark) { in kttcp_soreceive()
597 so->so_oobmark -= len; in kttcp_soreceive()
598 if (so->so_oobmark == 0) { in kttcp_soreceive()
599 so->so_state |= SS_RCVATMARK; in kttcp_soreceive()
604 if (offset == so->so_oobmark) in kttcp_soreceive()
618 !sosendallatonce(so) && !nextrecord) { in kttcp_soreceive()
619 if (so->so_error || so->so_state & SS_CANTRCVMORE) in kttcp_soreceive()
625 if ((flags & MSG_PEEK) && sbspace(&so->so_rcv) <= 0) in kttcp_soreceive()
632 if ((pr->pr_flags & PR_WANTRCVD) && so->so_pcb) { in kttcp_soreceive()
633 (*pr->pr_usrreqs->pr_rcvd)(so, flags, l); in kttcp_soreceive()
635 SBLASTRECORDCHK(&so->so_rcv, in kttcp_soreceive()
637 SBLASTMBUFCHK(&so->so_rcv, in kttcp_soreceive()
639 error = sbwait(&so->so_rcv); in kttcp_soreceive()
641 sbunlock(&so->so_rcv); in kttcp_soreceive()
642 sounlock(so); in kttcp_soreceive()
645 if ((m = so->so_rcv.sb_mb) != NULL) in kttcp_soreceive()
653 (void) sbdroprecord(&so->so_rcv); in kttcp_soreceive()
662 so->so_rcv.sb_mb = nextrecord; in kttcp_soreceive()
663 if (so->so_rcv.sb_mb == NULL) { in kttcp_soreceive()
664 so->so_rcv.sb_mbtail = NULL; in kttcp_soreceive()
665 so->so_rcv.sb_lastrecord = NULL; in kttcp_soreceive()
667 so->so_rcv.sb_lastrecord = nextrecord; in kttcp_soreceive()
669 SBLASTRECORDCHK(&so->so_rcv, "kttcp_soreceive 4"); in kttcp_soreceive()
670 SBLASTMBUFCHK(&so->so_rcv, "kttcp_soreceive 4"); in kttcp_soreceive()
671 if (pr->pr_flags & PR_WANTRCVD && so->so_pcb) { in kttcp_soreceive()
672 (*pr->pr_usrreqs->pr_rcvd)(so, flags, l); in kttcp_soreceive()
676 (flags & MSG_EOR) == 0 && (so->so_state & SS_CANTRCVMORE) == 0) { in kttcp_soreceive()
677 sbunlock(&so->so_rcv); in kttcp_soreceive()
684 sbunlock(&so->so_rcv); in kttcp_soreceive()
685 sounlock(so); in kttcp_soreceive()