Lines Matching defs:so
108 static int do_tcapability(struct sonode *so, t_uscalar_t cap_bits1);
109 static void so_removehooks(struct sonode *so);
125 so_sock2stream(struct sonode *so)
127 struct vnode *vp = SOTOV(so);
131 sotpi_info_t *sti = SOTOTPI(so);
135 mutex_enter(&so->so_lock);
136 so_lock_single(so);
138 ASSERT(so->so_version != SOV_STREAM);
147 mutex_exit(&so->so_lock);
150 mutex_enter(&so->so_lock);
152 dprintso(so, 0, ("so_sock2stream(%p): "
153 "_SIOCSOCKFALLBACK failed\n", (void *)so));
224 so->so_version = SOV_STREAM;
225 so->so_proto_handle = NULL;
231 mutex_exit(&so->so_lock);
232 so_removehooks(so);
233 mutex_enter(&so->so_lock);
240 so->so_error = sti->sti_delayed_error = 0;
241 freemsg(so->so_oobmsg);
242 so->so_oobmsg = NULL;
245 so->so_state &= ~(SS_RCVATMARK|SS_OOBPEND|SS_HAVEOOBDATA|SS_HADOOBDATA|
247 ASSERT(so_verify_oobstate(so));
255 so_flush_discon_ind(so);
268 dprintso(so, 0,
269 ("so_sock2stream(%p): moving T_CONN_IND\n", (void *)so));
272 mutex_exit(&so->so_lock);
274 mutex_enter(&so->so_lock);
278 ASSERT(MUTEX_HELD(&so->so_lock));
279 so_unlock_single(so, SOLOCKED);
280 mutex_exit(&so->so_lock);
296 so_stream2sock(struct sonode *so)
298 struct vnode *vp = SOTOV(so);
299 sotpi_info_t *sti = SOTOTPI(so);
303 mutex_enter(&so->so_lock);
304 so_lock_single(so);
305 ASSERT(so->so_version == SOV_STREAM);
306 so->so_version = SOV_SOCKSTREAM;
308 mutex_exit(&so->so_lock);
317 strsetrerror(SOTOV(so), EIO, 1, NULL);
323 mutex_enter(&so->so_lock);
324 (void) so_lock_read(so, 0); /* Set SOREADLOCKED */
325 mutex_exit(&so->so_lock);
327 strsetrerror(SOTOV(so), 0, 0, NULL);
328 so_installhooks(so);
336 mutex_enter(&so->so_lock);
341 so_flush_discon_ind(so);
342 so_unlock_read(so); /* Clear SOREADLOCKED */
344 so_unlock_single(so, SOLOCKED);
345 mutex_exit(&so->so_lock);
352 so_installhooks(struct sonode *so)
354 struct vnode *vp = SOTOV(so);
365 so_removehooks(struct sonode *so)
367 struct vnode *vp = SOTOV(so);
378 so_basic_strinit(struct sonode *so)
380 struct vnode *vp = SOTOV(so);
383 sotpi_info_t *sti = SOTOTPI(so);
387 mutex_enter(&so->so_lock);
390 so->so_options = so_default_options;
392 mutex_exit(&so->so_lock);
394 so_installhooks(so);
413 so_strinit(struct sonode *so, struct sonode *tso)
415 sotpi_info_t *sti = SOTOTPI(so);
419 so_basic_strinit(so);
427 error = do_tcapability(so, TC1_ACCEPTOR_ID | TC1_INFO);
433 mutex_enter(&so->so_lock);
440 so->so_mode = tso->so_mode & ~SM_ACCEPTOR_ID;
441 mutex_exit(&so->so_lock);
443 /* the following do_tcapability may update so->so_mode */
446 error = do_tcapability(so, TC1_ACCEPTOR_ID);
458 so->so_state |= SS_ISBOUND | SS_ISCONNECTED;
460 if (so->so_family == AF_INET6)
469 so_alloc_addr(so, sti->sti_addr_size);
475 copy_tinfo(struct sonode *so, struct T_info_ack *tia)
477 sotpi_info_t *sti = SOTOTPI(so);
489 so->so_state |= SS_ISBOUND;
494 so->so_state |= SS_ISBOUND|SS_ISCONNECTED;
509 so->so_mode |= SM_ATOMIC | SM_ADDR;
511 so->so_mode |= SM_CONNREQUIRED;
513 so->so_mode |= SM_EXDATA;
515 if (so->so_type == SOCK_SEQPACKET || so->so_type == SOCK_RAW) {
517 so->so_mode |= SM_ATOMIC;
519 if (so->so_family == AF_UNIX) {
520 so->so_mode |= SM_FDPASSING | SM_OPTDATA;
526 if (so->so_type == SOCK_STREAM) {
541 so->so_mode |= SM_BYTESTREAM;
545 check_tinfo(struct sonode *so)
547 sotpi_info_t *sti = SOTOTPI(so);
550 if (so->so_type == SOCK_DGRAM && sti->sti_serv_type != T_CLTS) {
551 eprintso(so, ("service type and socket type mismatch\n"));
552 eprintsoline(so, EPROTO);
555 if (so->so_type == SOCK_STREAM && sti->sti_serv_type == T_CLTS) {
556 eprintso(so, ("service type and socket type mismatch\n"));
557 eprintsoline(so, EPROTO);
560 if (so->so_type == SOCK_SEQPACKET && sti->sti_serv_type == T_CLTS) {
561 eprintso(so, ("service type and socket type mismatch\n"));
562 eprintsoline(so, EPROTO);
565 if (so->so_family == AF_INET &&
567 eprintso(so,
570 eprintsoline(so, EMSGSIZE);
573 if (so->so_family == AF_INET6 &&
575 eprintso(so,
578 eprintsoline(so, EMSGSIZE);
582 dprintso(so, 1, (
587 dprintso(so, 1, ("tinfo: so_state %s\n",
588 pr_state(so->so_state, so->so_mode)));
597 do_tinfo(struct sonode *so)
603 ASSERT(MUTEX_NOT_HELD(&so->so_lock));
606 SOTOTPI(so)->sti_addr_size = 0;
610 dprintso(so, 1, ("do_tinfo(%p)\n", (void *)so));
618 eprintsoline(so, ENOBUFS);
624 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0,
627 eprintsoline(so, error);
630 mutex_enter(&so->so_lock);
632 if ((error = sowaitprim(so, T_INFO_REQ, T_INFO_ACK,
634 mutex_exit(&so->so_lock);
635 eprintsoline(so, error);
640 copy_tinfo(so, (struct T_info_ack *)mp->b_rptr);
641 mutex_exit(&so->so_lock);
643 return (check_tinfo(so));
651 do_tcapability(struct sonode *so, t_uscalar_t cap_bits1)
657 sotpi_info_t *sti = SOTOTPI(so);
661 ASSERT(MUTEX_NOT_HELD(&so->so_lock));
664 return (do_tinfo(so));
672 dprintso(so, 1, ("do_tcapability(%p)\n", (void *)so));
681 eprintsoline(so, ENOBUFS);
687 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0,
690 eprintsoline(so, error);
693 mutex_enter(&so->so_lock);
695 if ((error = sowaitprim(so, T_CAPABILITY_REQ, T_CAPABILITY_ACK,
697 mutex_exit(&so->so_lock);
702 ASSERT((so->so_mode & SM_ACCEPTOR_ID) == 0);
711 return ((error = do_tinfo(so)) == EPROTO ?
714 return (do_tinfo(so));
723 so_proc_tcapability_ack(so, tca);
727 mutex_exit(&so->so_lock);
731 return (check_tinfo(so));
740 so_proc_tcapability_ack(struct sonode *so, struct T_capability_ack *tca)
742 sotpi_info_t *sti = SOTOTPI(so);
752 so->so_mode |= SM_ACCEPTOR_ID;
756 copy_tinfo(so, &tca->INFO_ack);
763 sogeterr(struct sonode *so, boolean_t clear_err)
767 ASSERT(MUTEX_HELD(&so->so_lock));
769 error = so->so_error;
771 so->so_error = 0;
785 struct sonode *so = VTOSO(vp);
788 mutex_enter(&so->so_lock);
790 error = so->so_error;
793 error = so->so_error;
794 so->so_error = 0;
797 mutex_exit(&so->so_lock);
810 struct sonode *so = VTOSO(vp);
813 mutex_enter(&so->so_lock);
814 if (so->so_state & SS_CANTSENDMORE) {
818 error = so->so_error;
822 so->so_error = 0;
826 mutex_exit(&so->so_lock);
837 soseterror(struct sonode *so, int error)
841 ASSERT(MUTEX_HELD(&so->so_lock));
842 so->so_error = (ushort_t)error;
846 soisconnecting(struct sonode *so)
848 ASSERT(MUTEX_HELD(&so->so_lock));
849 so->so_state &= ~(SS_ISCONNECTED|SS_ISDISCONNECTING);
850 so->so_state |= SS_ISCONNECTING;
851 cv_broadcast(&so->so_state_cv);
855 soisconnected(struct sonode *so)
857 ASSERT(MUTEX_HELD(&so->so_lock));
858 so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
859 so->so_state |= SS_ISCONNECTED;
860 cv_broadcast(&so->so_state_cv);
867 soisdisconnected(struct sonode *so, int error)
869 ASSERT(MUTEX_HELD(&so->so_lock));
870 so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
871 so->so_state |= (SS_CANTRCVMORE|SS_CANTSENDMORE);
872 so->so_error = (ushort_t)error;
873 if (so->so_peercred != NULL) {
874 crfree(so->so_peercred);
875 so->so_peercred = NULL;
877 cv_broadcast(&so->so_state_cv);
886 sobreakconn(struct sonode *so, int error)
888 ASSERT(MUTEX_HELD(&so->so_lock));
889 so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
890 so->so_error = (ushort_t)error;
891 cv_broadcast(&so->so_state_cv);
903 socantsendmore(struct sonode *so)
905 ASSERT(MUTEX_HELD(&so->so_lock));
906 so->so_state |= SS_CANTSENDMORE;
907 cv_broadcast(&so->so_state_cv);
915 socantrcvmore(struct sonode *so)
917 ASSERT(MUTEX_HELD(&so->so_lock));
918 so->so_state |= SS_CANTRCVMORE;
919 cv_broadcast(&so->so_state_cv);
936 sowaitprim(struct sonode *so, t_scalar_t request_prim, t_scalar_t ack_prim,
943 dprintso(so, 1, ("sowaitprim(%p, %d, %d, %d, %p, %lu)\n",
944 (void *)so, request_prim, ack_prim, min_size, (void *)mpp, wait));
946 ASSERT(MUTEX_HELD(&so->so_lock));
948 error = sowaitack(so, &mp, wait);
952 dprintso(so, 1, ("got msg %p\n", (void *)mp));
956 eprintsoline(so, EPROTO);
974 eprintsoline(so, EPROTO);
986 dprintso(so, 0, ("error_ack for %d: %d/%d ->%d\n",
997 dprintso(so, 0, ("error_ack for %d: %d/%d\n",
1001 dprintso(so, 0, ("ok_ack for %d, expected %d for %d\n",
1004 dprintso(so, 0,
1011 eprintsoline(so, EPROTO);
1019 sowaitokack(struct sonode *so, t_scalar_t request_prim)
1024 error = sowaitprim(so, request_prim, T_OK_ACK,
1036 soqueueack(struct sonode *so, mblk_t *mp)
1038 sotpi_info_t *sti = SOTOTPI(so);
1048 mutex_enter(&so->so_lock);
1050 dprintso(so, 1, ("sti_ack_mp already set\n"));
1056 mutex_exit(&so->so_lock);
1063 sowaitack(struct sonode *so, mblk_t **mpp, clock_t wait)
1065 sotpi_info_t *sti = SOTOTPI(so);
1067 ASSERT(MUTEX_HELD(&so->so_lock));
1078 if (cv_reltimedwait(&sti->sti_ack_cv, &so->so_lock,
1080 eprintsoline(so, ETIME);
1085 cv_wait(&sti->sti_ack_cv, &so->so_lock);
1111 soqueueconnind(struct sonode *so, mblk_t *mp)
1113 sotpi_info_t *sti = SOTOTPI(so);
1122 mutex_enter(&so->so_lock);
1132 cv_signal(&so->so_acceptq_cv);
1133 mutex_exit(&so->so_lock);
1142 sowaitconnind(struct sonode *so, int fmode, mblk_t **mpp)
1145 sotpi_info_t *sti = SOTOTPI(so);
1148 ASSERT(MUTEX_NOT_HELD(&so->so_lock));
1149 mutex_enter(&so->so_lock);
1151 if (so->so_error) {
1152 error = sogeterr(so, B_TRUE);
1154 mutex_exit(&so->so_lock);
1165 if (so->so_state & SS_CLOSING) {
1170 if (!cv_wait_sig_swap(&so->so_acceptq_cv, &so->so_lock)) {
1185 mutex_exit(&so->so_lock);
1195 soflushconnind(struct sonode *so, t_scalar_t seqno)
1199 sotpi_info_t *sti = SOTOTPI(so);
1201 mutex_enter(&so->so_lock);
1206 dprintso(so, 1,
1225 so->so_error = ECONNABORTED;
1226 mutex_exit(&so->so_lock);
1232 mutex_exit(&so->so_lock);
1233 dprintso(so, 1, ("t_discon_ind: NOT found T_CONN_IND %d\n", seqno));
1243 sowaitconnected(struct sonode *so, int fmode, int nosig)
1247 ASSERT(MUTEX_HELD(&so->so_lock));
1249 while ((so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)) ==
1250 SS_ISCONNECTING && so->so_error == 0) {
1252 dprintso(so, 1, ("waiting for SS_ISCONNECTED on %p\n",
1253 (void *)so));
1257 if (so->so_state & SS_CLOSING)
1261 cv_wait(&so->so_state_cv, &so->so_lock);
1262 else if (!cv_wait_sig_swap(&so->so_state_cv, &so->so_lock)) {
1270 dprintso(so, 1, ("awoken on %p\n", (void *)so));
1273 if (so->so_error != 0) {
1274 error = sogeterr(so, B_TRUE);
1276 dprintso(so, 1, ("sowaitconnected: error %d\n", error));
1279 if (!(so->so_state & SS_ISCONNECTED)) {
1286 dprintso(so, 1, ("sowaitconnected: error %d\n", error));
1297 so_oob_sig(struct sonode *so, int extrasig,
1300 sotpi_info_t *sti = SOTOTPI(so);
1302 ASSERT(MUTEX_HELD(&so->so_lock));
1304 ASSERT(so_verify_oobstate(so));
1312 ASSERT(so->so_state & SS_OOBPEND);
1327 so->so_state |= SS_OOBPEND;
1329 * New urgent data on the way so forget about any old
1332 so->so_state &= ~(SS_HAVEOOBDATA|SS_HADOOBDATA);
1333 if (so->so_oobmsg != NULL) {
1334 dprintso(so, 1, ("sock: discarding old oob\n"));
1335 freemsg(so->so_oobmsg);
1336 so->so_oobmsg = NULL;
1340 ASSERT(so_verify_oobstate(so));
1349 so_oob_exdata(struct sonode *so, mblk_t *mp,
1352 sotpi_info_t *sti = SOTOTPI(so);
1354 ASSERT(MUTEX_HELD(&so->so_lock));
1356 ASSERT(so_verify_oobstate(so));
1369 ASSERT(so_verify_oobstate(so));
1378 so_oob_data(struct sonode *so, mblk_t *mp,
1381 sotpi_info_t *sti = SOTOTPI(so);
1383 ASSERT(MUTEX_HELD(&so->so_lock));
1385 ASSERT(so_verify_oobstate(so));
1393 ASSERT(so->so_oobmsg == NULL);
1394 if (so->so_options & SO_OOBINLINE) {
1399 so->so_state |= SS_HAVEOOBDATA;
1400 so->so_oobmsg = mp;
1403 ASSERT(so_verify_oobstate(so));
1412 * (*func)(so, mp);
1415 so_save_discon_ind(struct sonode *so,
1417 void (*func)(struct sonode *so, mblk_t *))
1419 sotpi_info_t *sti = SOTOTPI(so);
1421 ASSERT(MUTEX_HELD(&so->so_lock));
1428 if (sti->sti_discon_ind_mp != NULL || (so->so_flag & SOASYNC_UNBIND)) {
1447 so_drain_discon_ind(struct sonode *so)
1450 void (*func)(struct sonode *so, mblk_t *);
1451 sotpi_info_t *sti = SOTOTPI(so);
1453 ASSERT(MUTEX_HELD(&so->so_lock));
1454 ASSERT(so->so_flag & (SOLOCKED|SOASYNC_UNBIND));
1470 (void) (*func)(so, bp);
1479 so_flush_discon_ind(struct sonode *so)
1482 sotpi_info_t *sti = SOTOTPI(so);
1484 ASSERT(MUTEX_HELD(&so->so_lock));
1516 strsock_discon_ind(struct sonode *so, mblk_t *discon_mp)
1524 sotpi_info_t *sti = SOTOTPI(so);
1526 ASSERT(MUTEX_HELD(&so->so_lock));
1533 vp = SOTOV(so);
1540 ASSERT((so->so_state & SS_ACCEPTCONN) == 0);
1546 soisdisconnected(so, tpr->discon_ind.DISCON_reason);
1561 ASSERT(!(so->so_state & SS_ISBOUND));
1562 mutex_exit(&so->so_lock);
1563 } else if (!(so->so_state & SS_ISBOUND)) {
1564 mutex_exit(&so->so_lock);
1571 ASSERT((so->so_flag & SOASYNC_UNBIND) == 0);
1578 so->so_flag |= SOASYNC_UNBIND;
1579 ASSERT(!(so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)));
1580 so->so_state &= ~(SS_ISBOUND|SS_ACCEPTCONN);
1582 mutex_exit(&so->so_lock);
1598 (void) putnextctl1(strvp2wq(SOTOV(so)), M_FLUSH, FLUSHRW);
1599 error = kstrputmsg(SOTOV(so), mp, NULL, 0, 0,
1603 eprintsoline(so, error);
1608 strsetrerror(SOTOV(so), 0, 0, sogetrderr);
1609 strsetwerror(SOTOV(so), 0, 0, sogetwrerr);
1610 strseteof(SOTOV(so), 1);
1615 dprintso(so, 1, ("T_DISCON_IND: error %d\n", so->so_error));
1638 mutex_enter(&so->so_lock);
1664 struct sonode *so;
1668 so = VTOSO(vp);
1669 sti = SOTOTPI(so);
1671 dprintso(so, 1, ("strsock_proto(%p, %p)\n", (void *)vp, (void *)mp));
1696 dprintso(so, 1, ("strsock_proto: primitive %d\n", tpr->type));
1717 dprintso(so, 0,
1741 if ((so->so_mode & SM_CONNREQUIRED) ||
1742 !(so->so_state & SS_ISCONNECTED)) {
1749 if (so->so_family == AF_UNIX && msgdsize(mp) == 0 &&
1759 mutex_enter(&so->so_lock);
1760 soseterror(so, EPROTO);
1761 mutex_exit(&so->so_lock);
1814 mutex_enter(&so->so_lock);
1815 soseterror(so, EPROTO);
1816 mutex_exit(&so->so_lock);
1824 if (so->so_family == AF_INET) {
1832 mutex_enter(&so->so_lock);
1841 (so->so_type != SOCK_RAW &&
1845 dprintso(so, 0,
1847 pr_addr(so->so_family,
1849 dprintso(so, 0, (" - %s\n",
1850 pr_addr(so->so_family, sti->sti_faddr_sa,
1853 mutex_exit(&so->so_lock);
1857 mutex_exit(&so->so_lock);
1858 } else if (so->so_family == AF_INET6) {
1867 mutex_enter(&so->so_lock);
1878 (so->so_type != SOCK_RAW &&
1882 dprintso(so, 0,
1884 pr_addr(so->so_family,
1886 dprintso(so, 0, (" - %s\n",
1887 pr_addr(so->so_family, sti->sti_faddr_sa,
1890 mutex_exit(&so->so_lock);
1894 mutex_exit(&so->so_lock);
1895 } else if (so->so_family == AF_UNIX &&
1910 mutex_enter(&so->so_lock);
1911 soseterror(so, EPROTO);
1912 mutex_exit(&so->so_lock);
1924 mutex_enter(&so->so_lock);
1925 sobreakconn(so, ECONNRESET);
1926 mutex_exit(&so->so_lock);
1927 strsetrerror(SOTOV(so), 0, 0, sogetrderr);
1955 if (so->so_family == AF_UNIX && msgdsize(mp->b_cont) == 0 &&
1972 mutex_enter(&so->so_lock);
1973 soseterror(so, EPROTO);
1974 mutex_exit(&so->so_lock);
1986 mutex_enter(&so->so_lock);
1987 socantsendmore(so);
1989 mutex_exit(&so->so_lock);
1990 strsetwerror(SOTOV(so), 0, 0, sogetwrerr);
2024 dprintso(so, 1,
2027 pr_state(so->so_state, so->so_mode)));
2030 dprintso(so, 0,
2046 mutex_enter(&so->so_lock);
2047 so_oob_sig(so, 0, allmsgsigs, pollwakeups);
2048 mctl = so_oob_exdata(so, mctl, allmsgsigs, pollwakeups);
2049 mdata = so_oob_data(so, mdata, allmsgsigs, pollwakeups);
2083 !(so->so_options & SO_OOBINLINE)) {
2097 mutex_exit(&so->so_lock);
2119 dprintso(so, 1,
2124 pr_state(so->so_state, so->so_mode)));
2126 dprintso(so, 1,
2131 pr_state(so->so_state, so->so_mode)));
2134 mutex_exit(&so->so_lock);
2157 mutex_enter(&so->so_lock);
2158 if ((so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)) !=
2160 mutex_exit(&so->so_lock);
2161 dprintso(so, 1,
2162 ("T_CONN_CON: state %x\n", so->so_state));
2174 if (so->so_family == AF_UNIX ?
2181 soisdisconnected(so, EPROTO);
2184 mutex_exit(&so->so_lock);
2185 strsetrerror(SOTOV(so), 0, 0, sogetrderr);
2186 strsetwerror(SOTOV(so), 0, 0, sogetwrerr);
2187 strseteof(SOTOV(so), 1);
2204 mutex_exit(&so->so_lock);
2205 strsetrerror(SOTOV(so), 0, 0, sogetrderr);
2206 strsetwerror(SOTOV(so), 0, 0, sogetwrerr);
2207 strseteof(SOTOV(so), 1);
2222 if (so->so_family != AF_UNIX) {
2229 if (so->so_peercred != NULL)
2230 crfree(so->so_peercred);
2231 so->so_peercred = msg_getcred(mp, &so->so_cpid);
2232 if (so->so_peercred != NULL)
2233 crhold(so->so_peercred);
2236 soisconnected(so);
2237 mutex_exit(&so->so_lock);
2264 if (!(so->so_state & SS_ACCEPTCONN)) {
2271 soqueueconnind(so, mp);
2290 * instead of T_DISCON_IND so that it may use the
2296 mutex_enter(&so->so_lock);
2297 so->so_state &= ~SS_ISCONNECTING;
2298 socantrcvmore(so);
2299 mutex_exit(&so->so_lock);
2300 strseteof(SOTOV(so), 1);
2316 if (so->so_state & SS_ACCEPTCONN) {
2326 (void) soflushconnind(so, tpr->discon_ind.SEQ_number);
2343 mutex_enter(&so->so_lock);
2344 if ((so->so_state & SS_CANTRCVMORE) &&
2345 (so->so_family == AF_UNIX)) {
2346 socantsendmore(so);
2348 mutex_exit(&so->so_lock);
2349 strsetwerror(SOTOV(so), 0, 0, sogetwrerr);
2350 dprintso(so, 1,
2351 ("T_DISCON_IND: error %d\n", so->so_error));
2362 } else if (so->so_flag & (SOASYNC_UNBIND | SOLOCKED)) {
2366 so_save_discon_ind(so, mp, strsock_discon_ind);
2367 mutex_exit(&so->so_lock);
2372 (void) strsock_discon_ind(so, mp);
2373 mutex_exit(&so->so_lock);
2383 dprintso(so, 0,
2394 if (so->so_mode & SM_CONNREQUIRED) {
2396 eprintsoline(so, 0);
2414 mutex_enter(&so->so_lock);
2415 if (so->so_state & SS_ISCONNECTED) {
2420 switch (so->so_family) {
2466 dprintso(so, 0,
2468 pr_addr(so->so_family,
2470 dprintso(so, 0, ("%s\n",
2471 pr_addr(so->so_family, sti->sti_faddr_sa,
2474 mutex_exit(&so->so_lock);
2489 soseterror(so, error);
2490 mutex_exit(&so->so_lock);
2491 strsetrerror(SOTOV(so), 0, 0, sogetrderr);
2492 strsetwerror(SOTOV(so), 0, 0, sogetwrerr);
2508 if (!(so->so_options & SO_DGRAM_ERRIND)) {
2509 mutex_exit(&so->so_lock);
2522 mutex_exit(&so->so_lock);
2527 dprintso(so, 0,
2543 mutex_enter(&so->so_lock);
2544 if ((so->so_flag & SOASYNC_UNBIND) &&
2546 so_unlock_single(so, SOASYNC_UNBIND);
2547 mutex_exit(&so->so_lock);
2551 mutex_exit(&so->so_lock);
2552 soqueueack(so, mp);
2566 mutex_enter(&so->so_lock);
2567 if ((so->so_flag & SOASYNC_UNBIND) &&
2569 dprintso(so, 1,
2571 so_unlock_single(so, SOASYNC_UNBIND);
2572 mutex_exit(&so->so_lock);
2576 mutex_exit(&so->so_lock);
2577 soqueueack(so, mp);
2588 soqueueack(so, mp);
2605 soqueueack(so, mp);
2616 soqueueack(so, mp);
2627 soqueueack(so, mp);
2655 struct sonode *so;
2658 so = VTOSO(vp);
2659 sti = SOTOTPI(so);
2661 dprintso(so, 1, ("strsock_misc(%p, %p, 0x%x)\n",
2679 mutex_enter(&so->so_lock);
2680 dprintso(so, 1,
2683 pr_state(so->so_state, so->so_mode)));
2684 so_oob_sig(so, 1, allmsgsigs, pollwakeups);
2685 dprintso(so, 1,
2690 pr_state(so->so_state, so->so_mode)));
2691 mutex_exit(&so->so_lock);
2744 so_set_events(struct sonode *so, vnode_t *vp, cred_t *cr)
2746 int events = so->so_state & SS_ASYNC ?
2750 return (so_set_asyncsigs(vp, so->so_pgrp, events, 0, cr));
2756 so_flip_async(struct sonode *so, vnode_t *vp, int mode, cred_t *cr)
2758 ASSERT(mutex_owned(&so->so_lock));
2759 if (so->so_pgrp != 0) {
2761 int events = so->so_state & SS_ASYNC ? /* Old flag */
2765 so_lock_single(so);
2766 mutex_exit(&so->so_lock);
2768 error = so_set_asyncsigs(vp, so->so_pgrp, events, mode, cr);
2770 mutex_enter(&so->so_lock);
2771 so_unlock_single(so, SOLOCKED);
2775 so->so_state ^= SS_ASYNC;
2784 so_set_siggrp(struct sonode *so, vnode_t *vp, pid_t pgrp, int mode, cred_t *cr)
2786 int events = so->so_state & SS_ASYNC ?
2791 ASSERT(mutex_owned(&so->so_lock));
2799 so_lock_single(so);
2800 mutex_exit(&so->so_lock);
2803 dprintso(so, 1, ("setown: adding pgrp %d ev 0x%x\n",
2807 eprintsoline(so, error);
2812 if (so->so_pgrp != 0) {
2813 dprintso(so, 1, ("setown: removing pgrp %d\n", so->so_pgrp));
2814 error = so_set_asyncsigs(vp, so->so_pgrp, 0, mode, cr);
2816 eprintsoline(so, error);
2820 mutex_enter(&so->so_lock);
2821 so_unlock_single(so, SOLOCKED);
2822 so->so_pgrp = pgrp;
2825 mutex_enter(&so->so_lock);
2826 so_unlock_single(so, SOLOCKED);
2845 struct sonode *so;
2859 so = VTOSO(vp);
2861 dprintso(so, 1, ("sock_getmsg(%p) %s\n",
2862 (void *)so, pr_state(so->so_state, so->so_mode)));
2864 if (so->so_version == SOV_STREAM) {
2868 eprintsoline(so, ENOSTR);
2891 struct sonode *so;
2904 so = VTOSO(vp);
2906 dprintso(so, 1, ("sock_putmsg(%p) %s\n",
2907 (void *)so, pr_state(so->so_state, so->so_mode)));
2909 if (so->so_version == SOV_STREAM) {
2913 eprintsoline(so, ENOSTR);
2920 * No locks are acquired here, so it is safe to use while uf_lock is held.
2926 struct sonode *so;
2934 so = VTOSO(vp->v_stream->sd_vnode);
2936 so = VTOSO(vp);
2938 if (so->so_version == SOV_STREAM || !(so->so_state & SS_ASYNC))