Lines Matching full:so

57  * Function pointer set by the AIO routines so that the socket buffer code
78 static void sbunreserve_locked(struct socket *so, sb_which which);
373 socantsendmore_locked(struct socket *so) in socantsendmore_locked() argument
376 SOCK_SENDBUF_LOCK_ASSERT(so); in socantsendmore_locked()
378 so->so_snd.sb_state |= SBS_CANTSENDMORE; in socantsendmore_locked()
379 sowwakeup_locked(so); in socantsendmore_locked()
380 SOCK_SENDBUF_UNLOCK_ASSERT(so); in socantsendmore_locked()
384 socantsendmore(struct socket *so) in socantsendmore() argument
387 SOCK_SENDBUF_LOCK(so); in socantsendmore()
388 socantsendmore_locked(so); in socantsendmore()
389 SOCK_SENDBUF_UNLOCK_ASSERT(so); in socantsendmore()
393 socantrcvmore_locked(struct socket *so) in socantrcvmore_locked() argument
396 SOCK_RECVBUF_LOCK_ASSERT(so); in socantrcvmore_locked()
398 so->so_rcv.sb_state |= SBS_CANTRCVMORE; in socantrcvmore_locked()
400 if (so->so_rcv.sb_flags & SB_TLS_RX) in socantrcvmore_locked()
401 ktls_check_rx(&so->so_rcv); in socantrcvmore_locked()
403 sorwakeup_locked(so); in socantrcvmore_locked()
404 SOCK_RECVBUF_UNLOCK_ASSERT(so); in socantrcvmore_locked()
408 socantrcvmore(struct socket *so) in socantrcvmore() argument
411 SOCK_RECVBUF_LOCK(so); in socantrcvmore()
412 socantrcvmore_locked(so); in socantrcvmore()
413 SOCK_RECVBUF_UNLOCK_ASSERT(so); in socantrcvmore()
417 soroverflow_locked(struct socket *so) in soroverflow_locked() argument
420 SOCK_RECVBUF_LOCK_ASSERT(so); in soroverflow_locked()
422 if (so->so_options & SO_RERROR) { in soroverflow_locked()
423 so->so_rerror = ENOBUFS; in soroverflow_locked()
424 sorwakeup_locked(so); in soroverflow_locked()
426 SOCK_RECVBUF_UNLOCK(so); in soroverflow_locked()
428 SOCK_RECVBUF_UNLOCK_ASSERT(so); in soroverflow_locked()
432 soroverflow(struct socket *so) in soroverflow() argument
435 SOCK_RECVBUF_LOCK(so); in soroverflow()
436 soroverflow_locked(so); in soroverflow()
437 SOCK_RECVBUF_UNLOCK_ASSERT(so); in soroverflow()
444 sbwait(struct socket *so, sb_which which) in sbwait() argument
448 SOCK_BUF_LOCK_ASSERT(so, which); in sbwait()
450 sb = sobuf(so, which); in sbwait()
452 return (msleep_sbt(&sb->sb_acc, soeventmtx(so, which), in sbwait()
469 sowakeup(struct socket *so, const sb_which which) in sowakeup() argument
474 SOCK_BUF_LOCK_ASSERT(so, which); in sowakeup()
476 sb = sobuf(so, which); in sowakeup()
486 ret = sb->sb_upcall(so, sb->sb_upcallarg, M_NOWAIT); in sowakeup()
488 KASSERT(sb == &so->so_rcv, in sowakeup()
490 soupcall_clear(so, SO_RCV); in sowakeup()
495 sowakeup_aio(so, which); in sowakeup()
496 SOCK_BUF_UNLOCK(so, which); in sowakeup()
498 soisconnected(so); in sowakeup()
499 if ((so->so_state & SS_ASYNC) && so->so_sigio != NULL) in sowakeup()
500 pgsigio(&so->so_sigio, SIGIO, 0); in sowakeup()
501 SOCK_BUF_UNLOCK_ASSERT(so, which); in sowakeup()
505 splice_push(struct socket *so) in splice_push() argument
509 SOCK_RECVBUF_LOCK_ASSERT(so); in splice_push()
511 sp = so->so_splice; in splice_push()
513 SOCK_RECVBUF_UNLOCK(so); in splice_push()
518 splice_pull(struct socket *so) in splice_pull() argument
522 SOCK_SENDBUF_LOCK_ASSERT(so); in splice_pull()
524 sp = so->so_splice_back; in splice_pull()
526 SOCK_SENDBUF_UNLOCK(so); in splice_pull()
541 sorwakeup_locked(struct socket *so) in sorwakeup_locked() argument
543 SOCK_RECVBUF_LOCK_ASSERT(so); in sorwakeup_locked()
544 if (so->so_rcv.sb_flags & SB_SPLICED) in sorwakeup_locked()
545 splice_push(so); in sorwakeup_locked()
546 else if (sb_notify(&so->so_rcv)) in sorwakeup_locked()
547 sowakeup(so, SO_RCV); in sorwakeup_locked()
549 SOCK_RECVBUF_UNLOCK(so); in sorwakeup_locked()
553 sowwakeup_locked(struct socket *so) in sowwakeup_locked() argument
555 SOCK_SENDBUF_LOCK_ASSERT(so); in sowwakeup_locked()
556 if (so->so_snd.sb_flags & SB_SPLICED) in sowwakeup_locked()
557 splice_pull(so); in sowwakeup_locked()
558 else if (sb_notify(&so->so_snd)) in sowwakeup_locked()
559 sowakeup(so, SO_SND); in sowwakeup_locked()
561 SOCK_SENDBUF_UNLOCK(so); in sowwakeup_locked()
596 soreserve(struct socket *so, u_long sndcc, u_long rcvcc) in soreserve() argument
600 SOCK_SENDBUF_LOCK(so); in soreserve()
601 SOCK_RECVBUF_LOCK(so); in soreserve()
602 if (sbreserve_locked(so, SO_SND, sndcc, td) == 0) in soreserve()
604 if (sbreserve_locked(so, SO_RCV, rcvcc, td) == 0) in soreserve()
606 if (so->so_rcv.sb_lowat == 0) in soreserve()
607 so->so_rcv.sb_lowat = 1; in soreserve()
608 if (so->so_snd.sb_lowat == 0) in soreserve()
609 so->so_snd.sb_lowat = MCLBYTES; in soreserve()
610 if (so->so_snd.sb_lowat > so->so_snd.sb_hiwat) in soreserve()
611 so->so_snd.sb_lowat = so->so_snd.sb_hiwat; in soreserve()
612 SOCK_RECVBUF_UNLOCK(so); in soreserve()
613 SOCK_SENDBUF_UNLOCK(so); in soreserve()
616 sbunreserve_locked(so, SO_SND); in soreserve()
618 SOCK_RECVBUF_UNLOCK(so); in soreserve()
619 SOCK_SENDBUF_UNLOCK(so); in soreserve()
640 * Allot mbufs to a sockbuf. Attempt to scale mbmax so that mbcnt doesn't
644 sbreserve_locked_limit(struct socket *so, sb_which which, u_long cc, in sbreserve_locked_limit() argument
647 struct sockbuf *sb = sobuf(so, which); in sbreserve_locked_limit()
650 SOCK_BUF_LOCK_ASSERT(so, which); in sbreserve_locked_limit()
665 if (!chgsbsize(so->so_cred->cr_uidinfo, &sb->sb_hiwat, cc, in sbreserve_locked_limit()
675 sbreserve_locked(struct socket *so, sb_which which, u_long cc, in sbreserve_locked() argument
678 return (sbreserve_locked_limit(so, which, cc, sb_max, td)); in sbreserve_locked()
682 sbunreserve_locked(struct socket *so, sb_which which) in sbunreserve_locked() argument
684 struct sockbuf *sb = sobuf(so, which); in sbunreserve_locked()
686 SOCK_BUF_LOCK_ASSERT(so, which); in sbunreserve_locked()
688 (void)chgsbsize(so->so_cred->cr_uidinfo, &sb->sb_hiwat, 0, in sbunreserve_locked()
694 sbsetopt(struct socket *so, struct sockopt *sopt) in sbsetopt() argument
708 * so disallow them. in sbsetopt()
715 SOCK_LOCK(so); in sbsetopt()
716 if (SOLISTENING(so)) { in sbsetopt()
720 lowat = &so->sol_sbsnd_lowat; in sbsetopt()
721 hiwat = &so->sol_sbsnd_hiwat; in sbsetopt()
722 flags = &so->sol_sbsnd_flags; in sbsetopt()
726 lowat = &so->sol_sbrcv_lowat; in sbsetopt()
727 hiwat = &so->sol_sbrcv_hiwat; in sbsetopt()
728 flags = &so->sol_sbrcv_flags; in sbsetopt()
735 sb = &so->so_snd; in sbsetopt()
740 sb = &so->so_rcv; in sbsetopt()
747 SOCK_BUF_LOCK(so, wh); in sbsetopt()
754 if (SOLISTENING(so)) { in sbsetopt()
763 if (!sbreserve_locked(so, wh, cc, curthread)) in sbsetopt()
780 if (!SOLISTENING(so)) in sbsetopt()
781 SOCK_BUF_UNLOCK(so, wh); in sbsetopt()
782 SOCK_UNLOCK(so); in sbsetopt()
790 sbrelease_locked(struct socket *so, sb_which which) in sbrelease_locked() argument
792 struct sockbuf *sb = sobuf(so, which); in sbrelease_locked()
794 SOCK_BUF_LOCK_ASSERT(so, which); in sbrelease_locked()
797 sbunreserve_locked(so, which); in sbrelease_locked()
801 sbrelease(struct socket *so, sb_which which) in sbrelease() argument
804 SOCK_BUF_LOCK(so, which); in sbrelease()
805 sbrelease_locked(so, which); in sbrelease()
806 SOCK_BUF_UNLOCK(so, which); in sbrelease()
810 sbdestroy(struct socket *so, sb_which which) in sbdestroy() argument
813 struct sockbuf *sb = sobuf(so, which); in sbdestroy()
819 sbrelease_locked(so, which); in sbdestroy()
1212 /* always call sbcompress() so it can do SBLASTMBUFCHK() */ in sbappendrecord_locked()