Lines Matching full:so

57  * Function pointer set by the AIO routines so that the socket buffer code
379 socantsendmore_locked(struct socket *so) in socantsendmore_locked() argument
382 SOCK_SENDBUF_LOCK_ASSERT(so); in socantsendmore_locked()
384 so->so_snd.sb_state |= SBS_CANTSENDMORE; in socantsendmore_locked()
385 sowwakeup_locked(so); in socantsendmore_locked()
386 SOCK_SENDBUF_UNLOCK_ASSERT(so); in socantsendmore_locked()
390 socantsendmore(struct socket *so) in socantsendmore() argument
393 SOCK_SENDBUF_LOCK(so); in socantsendmore()
394 socantsendmore_locked(so); in socantsendmore()
395 SOCK_SENDBUF_UNLOCK_ASSERT(so); in socantsendmore()
399 socantrcvmore_locked(struct socket *so) in socantrcvmore_locked() argument
402 SOCK_RECVBUF_LOCK_ASSERT(so); in socantrcvmore_locked()
404 so->so_rcv.sb_state |= SBS_CANTRCVMORE; in socantrcvmore_locked()
406 if (so->so_rcv.sb_flags & SB_TLS_RX) in socantrcvmore_locked()
407 ktls_check_rx(&so->so_rcv); in socantrcvmore_locked()
409 sorwakeup_locked(so); in socantrcvmore_locked()
410 SOCK_RECVBUF_UNLOCK_ASSERT(so); in socantrcvmore_locked()
414 socantrcvmore(struct socket *so) in socantrcvmore() argument
417 SOCK_RECVBUF_LOCK(so); in socantrcvmore()
418 socantrcvmore_locked(so); in socantrcvmore()
419 SOCK_RECVBUF_UNLOCK_ASSERT(so); in socantrcvmore()
423 soroverflow_locked(struct socket *so) in soroverflow_locked() argument
426 SOCK_RECVBUF_LOCK_ASSERT(so); in soroverflow_locked()
428 if (so->so_options & SO_RERROR) { in soroverflow_locked()
429 so->so_rerror = ENOBUFS; in soroverflow_locked()
430 sorwakeup_locked(so); in soroverflow_locked()
432 SOCK_RECVBUF_UNLOCK(so); in soroverflow_locked()
434 SOCK_RECVBUF_UNLOCK_ASSERT(so); in soroverflow_locked()
438 soroverflow(struct socket *so) in soroverflow() argument
441 SOCK_RECVBUF_LOCK(so); in soroverflow()
442 soroverflow_locked(so); in soroverflow()
443 SOCK_RECVBUF_UNLOCK_ASSERT(so); in soroverflow()
450 sbwait(struct socket *so, sb_which which) in sbwait() argument
454 SOCK_BUF_LOCK_ASSERT(so, which); in sbwait()
456 sb = sobuf(so, which); in sbwait()
458 return (msleep_sbt(&sb->sb_acc, soeventmtx(so, which), in sbwait()
475 sowakeup(struct socket *so, const sb_which which) in sowakeup() argument
480 SOCK_BUF_LOCK_ASSERT(so, which); in sowakeup()
482 sb = sobuf(so, which); in sowakeup()
492 ret = sb->sb_upcall(so, sb->sb_upcallarg, M_NOWAIT); in sowakeup()
494 KASSERT(sb == &so->so_rcv, in sowakeup()
496 soupcall_clear(so, SO_RCV); in sowakeup()
501 sowakeup_aio(so, which); in sowakeup()
502 SOCK_BUF_UNLOCK(so, which); in sowakeup()
504 soisconnected(so); in sowakeup()
505 if ((so->so_state & SS_ASYNC) && so->so_sigio != NULL) in sowakeup()
506 pgsigio(&so->so_sigio, SIGIO, 0); in sowakeup()
507 SOCK_BUF_UNLOCK_ASSERT(so, which); in sowakeup()
511 splice_push(struct socket *so) in splice_push() argument
515 SOCK_RECVBUF_LOCK_ASSERT(so); in splice_push()
517 sp = so->so_splice; in splice_push()
519 SOCK_RECVBUF_UNLOCK(so); in splice_push()
524 splice_pull(struct socket *so) in splice_pull() argument
528 SOCK_SENDBUF_LOCK_ASSERT(so); in splice_pull()
530 sp = so->so_splice_back; in splice_pull()
532 SOCK_SENDBUF_UNLOCK(so); in splice_pull()
547 sorwakeup_locked(struct socket *so) in sorwakeup_locked() argument
549 SOCK_RECVBUF_LOCK_ASSERT(so); in sorwakeup_locked()
550 if (so->so_rcv.sb_flags & SB_SPLICED) in sorwakeup_locked()
551 splice_push(so); in sorwakeup_locked()
552 else if (sb_notify(&so->so_rcv)) in sorwakeup_locked()
553 sowakeup(so, SO_RCV); in sorwakeup_locked()
555 SOCK_RECVBUF_UNLOCK(so); in sorwakeup_locked()
559 sowwakeup_locked(struct socket *so) in sowwakeup_locked() argument
561 SOCK_SENDBUF_LOCK_ASSERT(so); in sowwakeup_locked()
562 if (so->so_snd.sb_flags & SB_SPLICED) in sowwakeup_locked()
563 splice_pull(so); in sowwakeup_locked()
564 else if (sb_notify(&so->so_snd)) in sowwakeup_locked()
565 sowakeup(so, SO_SND); in sowwakeup_locked()
567 SOCK_SENDBUF_UNLOCK(so); in sowwakeup_locked()
602 soreserve(struct socket *so, u_long sndcc, u_long rcvcc) in soreserve() argument
606 SOCK_SENDBUF_LOCK(so); in soreserve()
607 SOCK_RECVBUF_LOCK(so); in soreserve()
608 if (sbreserve_locked(so, SO_SND, sndcc, td) == 0) in soreserve()
610 if (sbreserve_locked(so, SO_RCV, rcvcc, td) == 0) in soreserve()
612 if (so->so_rcv.sb_lowat == 0) in soreserve()
613 so->so_rcv.sb_lowat = 1; in soreserve()
614 if (so->so_snd.sb_lowat == 0) in soreserve()
615 so->so_snd.sb_lowat = MCLBYTES; in soreserve()
616 if (so->so_snd.sb_lowat > so->so_snd.sb_hiwat) in soreserve()
617 so->so_snd.sb_lowat = so->so_snd.sb_hiwat; in soreserve()
618 SOCK_RECVBUF_UNLOCK(so); in soreserve()
619 SOCK_SENDBUF_UNLOCK(so); in soreserve()
622 sbrelease_locked(so, SO_SND); in soreserve()
624 SOCK_RECVBUF_UNLOCK(so); in soreserve()
625 SOCK_SENDBUF_UNLOCK(so); in soreserve()
646 * Allot mbufs to a sockbuf. Attempt to scale mbmax so that mbcnt doesn't
650 sbreserve_locked_limit(struct socket *so, sb_which which, u_long cc, in sbreserve_locked_limit() argument
653 struct sockbuf *sb = sobuf(so, which); in sbreserve_locked_limit()
656 SOCK_BUF_LOCK_ASSERT(so, which); in sbreserve_locked_limit()
671 if (!chgsbsize(so->so_cred->cr_uidinfo, &sb->sb_hiwat, cc, in sbreserve_locked_limit()
681 sbreserve_locked(struct socket *so, sb_which which, u_long cc, in sbreserve_locked() argument
684 return (sbreserve_locked_limit(so, which, cc, sb_max, td)); in sbreserve_locked()
688 sbsetopt(struct socket *so, struct sockopt *sopt) in sbsetopt() argument
702 * so disallow them. in sbsetopt()
709 SOCK_LOCK(so); in sbsetopt()
710 if (SOLISTENING(so)) { in sbsetopt()
714 lowat = &so->sol_sbsnd_lowat; in sbsetopt()
715 hiwat = &so->sol_sbsnd_hiwat; in sbsetopt()
716 flags = &so->sol_sbsnd_flags; in sbsetopt()
720 lowat = &so->sol_sbrcv_lowat; in sbsetopt()
721 hiwat = &so->sol_sbrcv_hiwat; in sbsetopt()
722 flags = &so->sol_sbrcv_flags; in sbsetopt()
729 sb = &so->so_snd; in sbsetopt()
734 sb = &so->so_rcv; in sbsetopt()
741 SOCK_BUF_LOCK(so, wh); in sbsetopt()
748 if (SOLISTENING(so)) { in sbsetopt()
757 if (!sbreserve_locked(so, wh, cc, curthread)) in sbsetopt()
773 if (!SOLISTENING(so)) in sbsetopt()
774 SOCK_BUF_UNLOCK(so, wh); in sbsetopt()
775 SOCK_UNLOCK(so); in sbsetopt()
783 sbrelease_internal(struct socket *so, sb_which which) in sbrelease_internal() argument
785 struct sockbuf *sb = sobuf(so, which); in sbrelease_internal()
788 (void)chgsbsize(so->so_cred->cr_uidinfo, &sb->sb_hiwat, 0, in sbrelease_internal()
794 sbrelease_locked(struct socket *so, sb_which which) in sbrelease_locked() argument
797 SOCK_BUF_LOCK_ASSERT(so, which); in sbrelease_locked()
799 sbrelease_internal(so, which); in sbrelease_locked()
803 sbrelease(struct socket *so, sb_which which) in sbrelease() argument
806 SOCK_BUF_LOCK(so, which); in sbrelease()
807 sbrelease_locked(so, which); in sbrelease()
808 SOCK_BUF_UNLOCK(so, which); in sbrelease()
812 sbdestroy(struct socket *so, sb_which which) in sbdestroy() argument
815 struct sockbuf *sb = sobuf(so, which); in sbdestroy()
821 sbrelease_internal(so, which); in sbdestroy()
1220 /* always call sbcompress() so it can do SBLASTMBUFCHK() */ in sbappendrecord_locked()