Lines Matching defs:so

86 soisconnecting(struct socket *so)
88 soassertlocked(so);
89 so->so_state &= ~(SS_ISCONNECTED|SS_ISDISCONNECTING);
90 so->so_state |= SS_ISCONNECTING;
94 soisconnected(struct socket *so)
96 struct socket *head = so->so_head;
98 soassertlocked(so);
99 so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
100 so->so_state |= SS_ISCONNECTED;
102 if (head != NULL && so->so_onq == &head->so_q0) {
104 sounlock(so);
106 solock(so);
108 if (so->so_onq != &head->so_q0) {
114 soqremque(so, 0);
115 soqinsque(head, so, 1);
122 wakeup(&so->so_timeo);
123 sorwakeup(so);
124 sowwakeup(so);
129 soisdisconnecting(struct socket *so)
131 soassertlocked(so);
132 so->so_state &= ~SS_ISCONNECTING;
133 so->so_state |= SS_ISDISCONNECTING;
135 mtx_enter(&so->so_rcv.sb_mtx);
136 so->so_rcv.sb_state |= SS_CANTRCVMORE;
137 mtx_leave(&so->so_rcv.sb_mtx);
139 mtx_enter(&so->so_snd.sb_mtx);
140 so->so_snd.sb_state |= SS_CANTSENDMORE;
141 mtx_leave(&so->so_snd.sb_mtx);
143 wakeup(&so->so_timeo);
144 sowwakeup(so);
145 sorwakeup(so);
149 soisdisconnected(struct socket *so)
151 soassertlocked(so);
153 mtx_enter(&so->so_rcv.sb_mtx);
154 so->so_rcv.sb_state |= SS_CANTRCVMORE;
155 mtx_leave(&so->so_rcv.sb_mtx);
157 mtx_enter(&so->so_snd.sb_mtx);
158 so->so_snd.sb_state |= SS_CANTSENDMORE;
159 mtx_leave(&so->so_snd.sb_mtx);
161 so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
162 so->so_state |= SS_ISDISCONNECTED;
164 wakeup(&so->so_timeo);
165 sowwakeup(so);
166 sorwakeup(so);
180 struct socket *so;
189 so = soalloc(head->so_proto, wait);
190 if (so == NULL)
192 so->so_type = head->so_type;
193 so->so_options = head->so_options &~ SO_ACCEPTCONN;
194 so->so_linger = head->so_linger;
195 so->so_state = head->so_state | SS_NOFDREF;
196 so->so_proto = head->so_proto;
197 so->so_timeo = head->so_timeo;
198 so->so_euid = head->so_euid;
199 so->so_ruid = head->so_ruid;
200 so->so_egid = head->so_egid;
201 so->so_rgid = head->so_rgid;
202 so->so_cpid = head->so_cpid;
205 * Lock order will be `head' -> `so' while these sockets are linked.
207 solock_nonet(so);
212 if (soreserve(so, head->so_snd.sb_hiwat, head->so_rcv.sb_hiwat))
216 so->so_snd.sb_wat = head->so_snd.sb_wat;
217 so->so_snd.sb_lowat = head->so_snd.sb_lowat;
218 so->so_snd.sb_timeo_nsecs = head->so_snd.sb_timeo_nsecs;
222 so->so_rcv.sb_wat = head->so_rcv.sb_wat;
223 so->so_rcv.sb_lowat = head->so_rcv.sb_lowat;
224 so->so_rcv.sb_timeo_nsecs = head->so_rcv.sb_timeo_nsecs;
227 sigio_copy(&so->so_sigio, &head->so_sigio);
229 soqinsque(head, so, soqueue);
230 if (pru_attach(so, 0, wait) != 0) {
231 soqremque(so, soqueue);
235 so->so_state |= connstatus;
240 return (so);
243 sounlock_nonet(so);
244 sigio_free(&so->so_sigio);
245 klist_free(&so->so_rcv.sb_klist);
246 klist_free(&so->so_snd.sb_klist);
247 pool_put(&socket_pool, so);
253 soqinsque(struct socket *head, struct socket *so, int q)
256 soassertlocked(so);
258 KASSERT(so->so_onq == NULL);
260 so->so_head = head;
263 so->so_onq = &head->so_q0;
266 so->so_onq = &head->so_q;
268 TAILQ_INSERT_TAIL(so->so_onq, so, so_qe);
272 soqremque(struct socket *so, int q)
274 struct socket *head = so->so_head;
276 soassertlocked(so);
280 if (so->so_onq != &head->so_q0)
284 if (so->so_onq != &head->so_q)
288 TAILQ_REMOVE(so->so_onq, so, so_qe);
289 so->so_onq = NULL;
290 so->so_head = NULL;
305 socantsendmore(struct socket *so)
307 soassertlocked(so);
308 mtx_enter(&so->so_snd.sb_mtx);
309 so->so_snd.sb_state |= SS_CANTSENDMORE;
310 mtx_leave(&so->so_snd.sb_mtx);
311 sowwakeup(so);
315 socantrcvmore(struct socket *so)
317 mtx_enter(&so->so_rcv.sb_mtx);
318 so->so_rcv.sb_state |= SS_CANTRCVMORE;
319 mtx_leave(&so->so_rcv.sb_mtx);
320 sorwakeup(so);
324 solock(struct socket *so)
326 switch (so->so_proto->pr_domain->dom_family) {
332 rw_enter_write(&so->so_lock);
338 solock_shared(struct socket *so)
340 switch (so->so_proto->pr_domain->dom_family) {
346 rw_enter_write(&so->so_lock);
350 solock_nonet(struct socket *so)
352 switch (so->so_proto->pr_domain->dom_family) {
358 rw_enter_write(&so->so_lock);
362 solock_persocket(struct socket *so)
364 switch (so->so_proto->pr_domain->dom_family) {
390 sounlock(struct socket *so)
392 switch (so->so_proto->pr_domain->dom_family) {
398 rw_exit_write(&so->so_lock);
404 sounlock_shared(struct socket *so)
406 rw_exit_write(&so->so_lock);
407 switch (so->so_proto->pr_domain->dom_family) {
416 sounlock_nonet(struct socket *so)
418 rw_exit_write(&so->so_lock);
422 soassertlocked_readonly(struct socket *so)
424 switch (so->so_proto->pr_domain->dom_family) {
430 rw_assert_wrlock(&so->so_lock);
436 soassertlocked(struct socket *so)
438 switch (so->so_proto->pr_domain->dom_family) {
445 rw_status(&so->so_lock) != RW_WRITE)
451 rw_assert_wrlock(&so->so_lock);
457 sosleep_nsec(struct socket *so, void *ident, int prio, const char *wmesg,
462 switch (so->so_proto->pr_domain->dom_family) {
466 rw_exit_write(&so->so_lock);
469 rw_enter_write(&so->so_lock);
472 ret = rwsleep_nsec(ident, &so->so_lock, prio, wmesg, nsecs);
530 sowakeup(struct socket *so, struct sockbuf *sb)
549 pgsigio(&so->so_sigio, SIGIO, 0);
585 soreserve(struct socket *so, u_long sndcc, u_long rcvcc)
587 soassertlocked(so);
589 mtx_enter(&so->so_rcv.sb_mtx);
590 mtx_enter(&so->so_snd.sb_mtx);
591 if (sbreserve(so, &so->so_snd, sndcc))
593 so->so_snd.sb_wat = sndcc;
594 if (so->so_snd.sb_lowat == 0)
595 so->so_snd.sb_lowat = MCLBYTES;
596 if (so->so_snd.sb_lowat > so->so_snd.sb_hiwat)
597 so->so_snd.sb_lowat = so->so_snd.sb_hiwat;
598 if (sbreserve(so, &so->so_rcv, rcvcc))
600 so->so_rcv.sb_wat = rcvcc;
601 if (so->so_rcv.sb_lowat == 0)
602 so->so_rcv.sb_lowat = 1;
603 mtx_leave(&so->so_snd.sb_mtx);
604 mtx_leave(&so->so_rcv.sb_mtx);
608 sbrelease(so, &so->so_snd);
610 mtx_leave(&so->so_snd.sb_mtx);
611 mtx_leave(&so->so_rcv.sb_mtx);
617 * Attempt to scale mbmax so that mbcnt doesn't become limiting
621 sbreserve(struct socket *so, struct sockbuf *sb, u_long cc)
669 sbrelease(struct socket *so, struct sockbuf *sb)
672 sbflush(so, sb);
763 sbappend(struct socket *so, struct sockbuf *sb, struct mbuf *m)
781 sbappendrecord(so, sb, m); /* XXXXXX!!!! */
792 sbcompress(so, sb, m, n);
802 sbappendstream(struct socket *so, struct sockbuf *sb, struct mbuf *m)
810 sbcompress(so, sb, m, sb->sb_mbtail);
818 sbcheck(struct socket *so, struct sockbuf *sb)
846 sbappendrecord(struct socket *so, struct sockbuf *sb, struct mbuf *m0)
868 sbcompress(so, sb, m, m0);
879 sbappendaddr(struct socket *so, struct sockbuf *sb, const struct sockaddr *asa,
896 if (space > sbspace_locked(so, sb))
928 sbappendcontrol(struct socket *so, struct sockbuf *sb, struct mbuf *m0,
954 if (space > sbspace_locked(so, sb))
980 sbcompress(struct socket *so, struct sockbuf *sb, struct mbuf *m,
1037 sbflush(struct socket *so, struct sockbuf *sb)
1039 KASSERT(sb == &so->so_rcv || sb == &so->so_snd);
1043 sbdrop(so, sb, (int)sb->sb_cc);
1056 sbdrop(struct socket *so, struct sockbuf *sb, int len)
1113 sbdroprecord(struct socket *so, struct sockbuf *sb)