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