Lines Matching refs:so

79 so_listen_notsupp(struct sonode *so, int backlog, struct cred *cr)  in so_listen_notsupp()  argument
86 so_getsockname_notsupp(struct sonode *so, struct sockaddr *sa, in so_getsockname_notsupp() argument
94 so_getpeername_notsupp(struct sonode *so, struct sockaddr *addr, in so_getpeername_notsupp() argument
102 so_shutdown_notsupp(struct sonode *so, int how, struct cred *cr) in so_shutdown_notsupp() argument
109 so_sendmblk_notsupp(struct sonode *so, struct msghdr *msg, int fflag, in so_sendmblk_notsupp() argument
121 so_init(struct sonode *so, struct sonode *pso, struct cred *cr, int flags) in so_init() argument
123 return (socket_init_common(so, pso, flags, cr)); in so_init()
127 so_bind(struct sonode *so, struct sockaddr *name, socklen_t namelen, in so_bind() argument
132 SO_BLOCK_FALLBACK(so, SOP_BIND(so, name, namelen, flags, cr)); in so_bind()
137 if ((so->so_state & SS_CANTSENDMORE) && !xnet_skip_checks) { in so_bind()
153 switch (so->so_family) { in so_bind()
156 error = name->sa_family != so->so_family ? in so_bind()
158 eprintsoline(so, error); in so_bind()
163 (name->sa_family != so->so_family)) { in so_bind()
171 eprintsoline(so, error); in so_bind()
184 name->sa_family = so->so_family; in so_bind()
192 error = name->sa_family != so->so_family ? in so_bind()
194 eprintsoline(so, error); in so_bind()
198 if (name->sa_family != so->so_family) { in so_bind()
204 eprintsoline(so, error); in so_bind()
237 if (so->so_filter_active == 0 || in so_bind()
238 (error = sof_filter_bind(so, name, &namelen, cr)) < 0) { in so_bind()
239 error = (*so->so_downcalls->sd_bind) in so_bind()
240 (so->so_proto_handle, name, namelen, cr); in so_bind()
243 SO_UNBLOCK_FALLBACK(so); in so_bind()
249 so_listen(struct sonode *so, int backlog, struct cred *cr) in so_listen() argument
253 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_listen()
254 SO_BLOCK_FALLBACK(so, SOP_LISTEN(so, backlog, cr)); in so_listen()
256 if ((so)->so_filter_active == 0 || in so_listen()
257 (error = sof_filter_listen(so, &backlog, cr)) < 0) in so_listen()
258 error = (*so->so_downcalls->sd_listen)(so->so_proto_handle, in so_listen()
261 SO_UNBLOCK_FALLBACK(so); in so_listen()
268 so_connect(struct sonode *so, struct sockaddr *name, in so_connect() argument
274 ASSERT(MUTEX_NOT_HELD(&so->so_lock)); in so_connect()
275 SO_BLOCK_FALLBACK(so, SOP_CONNECT(so, name, namelen, fflag, flags, cr)); in so_connect()
282 if (so->so_error != 0) { in so_connect()
283 mutex_enter(&so->so_lock); in so_connect()
284 error = sogeterr(so, B_TRUE); in so_connect()
285 mutex_exit(&so->so_lock); in so_connect()
290 if (so->so_filter_active == 0 || in so_connect()
291 (error = sof_filter_connect(so, (struct sockaddr *)name, in so_connect()
293 error = (*so->so_downcalls->sd_connect)(so->so_proto_handle, in so_connect()
297 error = so_wait_connected(so, in so_connect()
301 SO_UNBLOCK_FALLBACK(so); in so_connect()
307 so_accept(struct sonode *so, int fflag, struct cred *cr, struct sonode **nsop) in so_accept() argument
314 SO_BLOCK_FALLBACK(so, SOP_ACCEPT(so, fflag, cr, nsop)); in so_accept()
315 if ((so->so_state & SS_ACCEPTCONN) == 0) { in so_accept()
316 SO_UNBLOCK_FALLBACK(so); in so_accept()
317 return ((so->so_type == SOCK_DGRAM || so->so_type == SOCK_RAW) ? in so_accept()
321 if ((error = so_acceptq_dequeue(so, (fflag & (FNONBLOCK|FNDELAY)), in so_accept()
326 if ((so->so_filter_active > 0 && in so_accept()
328 (error = (*so->so_downcalls->sd_accept)(so->so_proto_handle, in so_accept()
337 SO_UNBLOCK_FALLBACK(so); in so_accept()
342 so_sendmsg(struct sonode *so, struct nmsghdr *msg, struct uio *uiop, in so_sendmsg() argument
350 SO_BLOCK_FALLBACK(so, SOP_SENDMSG(so, msg, uiop, cr)); in so_sendmsg()
361 SO_UNBLOCK_FALLBACK(so); in so_sendmsg()
365 if ((so->so_mode & SM_ATOMIC) && in so_sendmsg()
366 uiop->uio_resid > so->so_proto_props.sopp_maxpsz && in so_sendmsg()
367 so->so_proto_props.sopp_maxpsz != -1) { in so_sendmsg()
368 SO_UNBLOCK_FALLBACK(so); in so_sendmsg()
376 if (so->so_state & SS_CANTSENDMORE) { in so_sendmsg()
381 if (so->so_error != 0) { in so_sendmsg()
382 mutex_enter(&so->so_lock); in so_sendmsg()
383 error = sogeterr(so, B_TRUE); in so_sendmsg()
384 mutex_exit(&so->so_lock); in so_sendmsg()
394 if ((so->so_mode & SM_EXDATA) == 0) { in so_sendmsg()
398 } else if (SO_SND_FLOWCTRLD(so)) { in so_sendmsg()
403 if ((error = so_snd_wait_qnotfull(so, dontblock)) != 0) in so_sendmsg()
412 if (so->so_downcalls->sd_send_uio != NULL) { in so_sendmsg()
413 error = (*so->so_downcalls->sd_send_uio) in so_sendmsg()
414 (so->so_proto_handle, uiop, msg, cr); in so_sendmsg()
422 so->so_proto_props.sopp_maxpsz, in so_sendmsg()
423 so->so_proto_props.sopp_wroff, in so_sendmsg()
424 so->so_proto_props.sopp_maxblk, in so_sendmsg()
425 so->so_proto_props.sopp_tail, &error)) == NULL) { in so_sendmsg()
430 if (so->so_filter_active > 0 && in so_sendmsg()
431 ((mp = SOF_FILTER_DATA_OUT(so, mp, msg, cr, in so_sendmsg()
437 error = (*so->so_downcalls->sd_send) in so_sendmsg()
438 (so->so_proto_handle, mp, msg, cr); in so_sendmsg()
452 SO_UNBLOCK_FALLBACK(so); in so_sendmsg()
458 so_sendmblk_impl(struct sonode *so, struct nmsghdr *msg, int fflag, in so_sendmblk_impl() argument
467 if (so->so_downcalls->sd_send == NULL) in so_sendmblk_impl()
475 if ((so->so_mode & SM_ATOMIC) && in so_sendmblk_impl()
476 size > so->so_proto_props.sopp_maxpsz && in so_sendmblk_impl()
477 so->so_proto_props.sopp_maxpsz != -1) { in so_sendmblk_impl()
478 SO_UNBLOCK_FALLBACK(so); in so_sendmblk_impl()
486 if (so->so_state & SS_CANTSENDMORE) { in so_sendmblk_impl()
490 if (so->so_error != 0) { in so_sendmblk_impl()
491 mutex_enter(&so->so_lock); in so_sendmblk_impl()
492 error = sogeterr(so, B_TRUE); in so_sendmblk_impl()
493 mutex_exit(&so->so_lock); in so_sendmblk_impl()
498 if (SO_SND_FLOWCTRLD(so) && !fil_inject) { in so_sendmblk_impl()
503 if ((error = so_snd_wait_qnotfull(so, dontblock)) != 0) in so_sendmblk_impl()
516 if (mlen > so->so_proto_props.sopp_maxpsz) { in so_sendmblk_impl()
524 if (so->so_filter_active > 0 && in so_sendmblk_impl()
525 (mp = SOF_FILTER_DATA_OUT_FROM(so, fil, mp, msg, in so_sendmblk_impl()
532 error = (*so->so_downcalls->sd_send) in so_sendmblk_impl()
533 (so->so_proto_handle, mp, msg, cr); in so_sendmblk_impl()
547 if (fil_inject && error == 0 && SO_SND_FLOWCTRLD(so)) in so_sendmblk_impl()
556 so_sendmblk(struct sonode *so, struct nmsghdr *msg, int fflag, in so_sendmblk() argument
561 SO_BLOCK_FALLBACK(so, SOP_SENDMBLK(so, msg, fflag, cr, mpp)); in so_sendmblk()
563 error = so_sendmblk_impl(so, msg, fflag, cr, mpp, so->so_filter_top, in so_sendmblk()
566 SO_UNBLOCK_FALLBACK(so); in so_sendmblk()
572 so_shutdown(struct sonode *so, int how, struct cred *cr) in so_shutdown() argument
576 SO_BLOCK_FALLBACK(so, SOP_SHUTDOWN(so, how, cr)); in so_shutdown()
583 if (!(so->so_state & SS_ISCONNECTED)) { in so_shutdown()
594 if (so->so_filter_active == 0 || in so_shutdown()
595 (error = sof_filter_shutdown(so, &how, cr)) < 0) in so_shutdown()
596 error = ((*so->so_downcalls->sd_shutdown)(so->so_proto_handle, in so_shutdown()
604 mutex_enter(&so->so_lock); in so_shutdown()
606 (void) so_lock_read(so, 0); in so_shutdown()
608 so_rcv_flush(so); in so_shutdown()
610 so_unlock_read(so); in so_shutdown()
611 mutex_exit(&so->so_lock); in so_shutdown()
615 SO_UNBLOCK_FALLBACK(so); in so_shutdown()
620 so_getsockname(struct sonode *so, struct sockaddr *addr, in so_getsockname() argument
625 SO_BLOCK_FALLBACK(so, SOP_GETSOCKNAME(so, addr, addrlen, cr)); in so_getsockname()
627 if (so->so_filter_active == 0 || in so_getsockname()
628 (error = sof_filter_getsockname(so, addr, addrlen, cr)) < 0) in so_getsockname()
629 error = (*so->so_downcalls->sd_getsockname) in so_getsockname()
630 (so->so_proto_handle, addr, addrlen, cr); in so_getsockname()
632 SO_UNBLOCK_FALLBACK(so); in so_getsockname()
637 so_getpeername(struct sonode *so, struct sockaddr *addr, in so_getpeername() argument
642 SO_BLOCK_FALLBACK(so, SOP_GETPEERNAME(so, addr, addrlen, accept, cr)); in so_getpeername()
645 error = (*so->so_downcalls->sd_getpeername) in so_getpeername()
646 (so->so_proto_handle, addr, addrlen, cr); in so_getpeername()
647 } else if (!(so->so_state & SS_ISCONNECTED)) { in so_getpeername()
649 } else if ((so->so_state & SS_CANTSENDMORE) && !xnet_skip_checks) { in so_getpeername()
655 } else if (so->so_filter_active == 0 || in so_getpeername()
656 (error = sof_filter_getpeername(so, addr, addrlen, cr)) < 0) { in so_getpeername()
657 error = (*so->so_downcalls->sd_getpeername) in so_getpeername()
658 (so->so_proto_handle, addr, addrlen, cr); in so_getpeername()
661 SO_UNBLOCK_FALLBACK(so); in so_getpeername()
666 so_getsockopt(struct sonode *so, int level, int option_name, in so_getsockopt() argument
672 return (sof_getsockopt(so, option_name, optval, optlenp, cr)); in so_getsockopt()
674 SO_BLOCK_FALLBACK(so, in so_getsockopt()
675 SOP_GETSOCKOPT(so, level, option_name, optval, optlenp, flags, cr)); in so_getsockopt()
677 if ((so->so_filter_active == 0 || in so_getsockopt()
678 (error = sof_filter_getsockopt(so, level, option_name, optval, in so_getsockopt()
680 (error = socket_getopt_common(so, level, option_name, optval, in so_getsockopt()
682 error = (*so->so_downcalls->sd_getsockopt) in so_getsockopt()
683 (so->so_proto_handle, level, option_name, optval, optlenp, in so_getsockopt()
748 SO_UNBLOCK_FALLBACK(so); in so_getsockopt()
753 so_setsockopt(struct sonode *so, int level, int option_name, in so_setsockopt() argument
761 return (sof_setsockopt(so, option_name, optval, optlen, cr)); in so_setsockopt()
763 SO_BLOCK_FALLBACK(so, in so_setsockopt()
764 SOP_SETSOCKOPT(so, level, option_name, optval, optlen, cr)); in so_setsockopt()
767 if (so->so_state & SS_CANTSENDMORE && !xnet_skip_checks) { in so_setsockopt()
768 SO_UNBLOCK_FALLBACK(so); in so_setsockopt()
774 if (so->so_filter_active > 0 && in so_setsockopt()
775 (error = sof_filter_setsockopt(so, level, option_name, in so_setsockopt()
810 mutex_enter(&so->so_lock); in so_setsockopt()
812 so->so_rcvtimeo = drv_usectohz(t_usec); in so_setsockopt()
814 so->so_sndtimeo = drv_usectohz(t_usec); in so_setsockopt()
815 mutex_exit(&so->so_lock); in so_setsockopt()
825 so->so_xpg_rcvbuf = *(int32_t *)optval; in so_setsockopt()
829 error = (*so->so_downcalls->sd_setsockopt) in so_setsockopt()
830 (so->so_proto_handle, level, option_name, opt, optlen, cr); in so_setsockopt()
832 SO_UNBLOCK_FALLBACK(so); in so_setsockopt()
837 so_ioctl(struct sonode *so, int cmd, intptr_t arg, int mode, in so_ioctl() argument
842 SO_BLOCK_FALLBACK(so, SOP_IOCTL(so, cmd, arg, mode, cr, rvalp)); in so_ioctl()
848 if (so->so_error != 0) { in so_ioctl()
849 mutex_enter(&so->so_lock); in so_ioctl()
850 error = sogeterr(so, B_TRUE); in so_ioctl()
851 mutex_exit(&so->so_lock); in so_ioctl()
860 if ((so->so_filter_active == 0 || in so_ioctl()
861 (error = sof_filter_ioctl(so, cmd, arg, mode, in so_ioctl()
863 (error = socket_ioctl_common(so, cmd, arg, mode, cr, rvalp)) < 0 && in so_ioctl()
864 (error = socket_strioc_common(so, cmd, arg, mode, cr, rvalp)) < 0) { in so_ioctl()
865 error = (*so->so_downcalls->sd_ioctl)(so->so_proto_handle, in so_ioctl()
870 SO_UNBLOCK_FALLBACK(so); in so_ioctl()
876 so_poll(struct sonode *so, short events, int anyyet, short *reventsp, in so_poll() argument
879 int state = so->so_state, mask; in so_poll()
885 if (so->so_error != 0 && in so_poll()
895 if ((so->so_mode & SM_CONNREQUIRED) == 0 || (state & SS_ISCONNECTED)) { in so_poll()
901 if (!SO_SND_FLOWCTRLD(so)) { in so_poll()
922 if (!list_is_empty(&so->so_acceptq_list)) in so_poll()
934 if (so->so_downcalls != NULL && so->so_downcalls->sd_poll != NULL) { in so_poll()
935 *reventsp |= (*so->so_downcalls->sd_poll) in so_poll()
936 (so->so_proto_handle, events & SO_PROTO_POLLEV, anyyet, in so_poll()
942 if (SO_HAVE_DATA(so)) in so_poll()
970 mutex_enter(&so->so_lock); in so_poll()
971 if (SO_HAVE_DATA(so) || in so_poll()
972 !list_is_empty(&so->so_acceptq_list)) { in so_poll()
974 so->so_pollev |= SO_POLLEV_IN; in so_poll()
975 *phpp = &so->so_poll_list; in so_poll()
978 mutex_exit(&so->so_lock); in so_poll()
983 so->so_pollev |= SO_POLLEV_IN; in so_poll()
984 mutex_exit(&so->so_lock); in so_poll()
987 *phpp = &so->so_poll_list; in so_poll()
999 struct sonode *so = (struct sonode *)sock_handle; in so_connected() local
1001 mutex_enter(&so->so_lock); in so_connected()
1002 ASSERT(so->so_proto_handle != NULL); in so_connected()
1005 if (so->so_peercred != NULL) in so_connected()
1006 crfree(so->so_peercred); in so_connected()
1008 so->so_peercred = peer_cred; in so_connected()
1009 so->so_cpid = peer_cpid; in so_connected()
1012 so->so_proto_connid = id; in so_connected()
1013 soisconnected(so); in so_connected()
1017 so_notify_connected(so); in so_connected()
1023 struct sonode *so = (struct sonode *)sock_handle; in so_disconnected() local
1026 mutex_enter(&so->so_lock); in so_disconnected()
1032 connect_failed = !(so->so_state & SS_ISCONNECTED); in so_disconnected()
1034 so->so_proto_connid = id; in so_disconnected()
1035 soisdisconnected(so, error); in so_disconnected()
1036 so_notify_disconnected(so, connect_failed, error); in so_disconnected()
1045 struct sonode *so = (struct sonode *)sock_handle; in so_opctl() local
1049 mutex_enter(&so->so_lock); in so_opctl()
1050 socantsendmore(so); in so_opctl()
1051 so_notify_disconnecting(so); in so_opctl()
1054 mutex_enter(&so->so_lock); in so_opctl()
1055 socantrcvmore(so); in so_opctl()
1056 so_notify_eof(so); in so_opctl()
1060 mutex_enter(&so->so_lock); in so_opctl()
1061 so->so_state |= SS_ACCEPTCONN; in so_opctl()
1062 so->so_backlog = (unsigned int)arg; in so_opctl()
1071 if (so->so_filter_active > 0) in so_opctl()
1072 so->so_backlog = MAX(1, so->so_backlog - 1); in so_opctl()
1073 mutex_exit(&so->so_lock); in so_opctl()
1084 struct sonode *so = (struct sonode *)sock_handle; in so_txq_full() local
1087 so_snd_qfull(so); in so_txq_full()
1089 so_snd_qnotfull(so); in so_txq_full()
1090 mutex_enter(&so->so_lock); in so_txq_full()
1092 so_notify_writable(so); in so_txq_full()
1101 struct sonode *so = (struct sonode *)parenthandle; in so_newconn() local
1107 if ((so->so_state & SS_ACCEPTCONN) == 0 || in so_newconn()
1108 (so->so_acceptq_len >= so->so_backlog && in so_newconn()
1109 (so->so_filter_active == 0 || !sof_sonode_drop_deferred(so)))) { in so_newconn()
1113 nso = socket_newconn(so, proto_handle, sock_downcalls, SOCKET_NOSLEEP, in so_newconn()
1123 nso->so_listener = so; in so_newconn()
1133 mutex_enter(&so->so_acceptq_lock); in so_newconn()
1134 if (so->so_state & (SS_CLOSING|SS_FALLBACK_PENDING|SS_FALLBACK_COMP)) { in so_newconn()
1135 mutex_exit(&so->so_acceptq_lock); in so_newconn()
1144 so->so_acceptq_len++; in so_newconn()
1146 list_insert_tail(&so->so_acceptq_defer, nso); in so_newconn()
1147 mutex_exit(&so->so_acceptq_lock); in so_newconn()
1149 list_insert_tail(&so->so_acceptq_list, nso); in so_newconn()
1150 cv_signal(&so->so_acceptq_cv); in so_newconn()
1151 mutex_exit(&so->so_acceptq_lock); in so_newconn()
1152 mutex_enter(&so->so_lock); in so_newconn()
1153 so_notify_newconn(so); in so_newconn()
1163 struct sonode *so; in so_set_prop() local
1165 so = (struct sonode *)sock_handle; in so_set_prop()
1167 mutex_enter(&so->so_lock); in so_set_prop()
1170 so->so_proto_props.sopp_maxblk = soppp->sopp_maxblk; in so_set_prop()
1172 so->so_proto_props.sopp_wroff = soppp->sopp_wroff; in so_set_prop()
1174 so->so_proto_props.sopp_tail = soppp->sopp_tail; in so_set_prop()
1176 so->so_proto_props.sopp_rxhiwat = soppp->sopp_rxhiwat; in so_set_prop()
1178 so->so_proto_props.sopp_rxlowat = soppp->sopp_rxlowat; in so_set_prop()
1180 so->so_proto_props.sopp_maxpsz = soppp->sopp_maxpsz; in so_set_prop()
1182 so->so_proto_props.sopp_minpsz = soppp->sopp_minpsz; in so_set_prop()
1185 so->so_proto_props.sopp_zcopyflag |= STZCVMSAFE; in so_set_prop()
1186 so->so_proto_props.sopp_zcopyflag &= ~STZCVMUNSAFE; in so_set_prop()
1188 so->so_proto_props.sopp_zcopyflag |= STZCVMUNSAFE; in so_set_prop()
1189 so->so_proto_props.sopp_zcopyflag &= ~STZCVMSAFE; in so_set_prop()
1193 so->so_proto_props.sopp_zcopyflag |= STRCOPYCACHED; in so_set_prop()
1197 so->so_proto_props.sopp_oobinline = soppp->sopp_oobinline; in so_set_prop()
1199 so->so_proto_props.sopp_rcvtimer = soppp->sopp_rcvtimer; in so_set_prop()
1201 so->so_proto_props.sopp_rcvthresh = soppp->sopp_rcvthresh; in so_set_prop()
1203 so->so_proto_props.sopp_maxaddrlen = soppp->sopp_maxaddrlen; in so_set_prop()
1205 so->so_proto_props.sopp_loopback = soppp->sopp_loopback; in so_set_prop()
1207 mutex_exit(&so->so_lock); in so_set_prop()
1209 if (so->so_filter_active > 0) { in so_set_prop()
1213 maxblk = so->so_proto_props.sopp_maxblk; in so_set_prop()
1214 wroff = so->so_proto_props.sopp_wroff; in so_set_prop()
1215 tail = so->so_proto_props.sopp_tail; in so_set_prop()
1216 for (inst = so->so_filter_bottom; inst != NULL; in so_set_prop()
1224 mutex_enter(&so->so_lock); in so_set_prop()
1225 so->so_proto_props.sopp_maxblk = maxblk; in so_set_prop()
1226 so->so_proto_props.sopp_wroff = wroff; in so_set_prop()
1227 so->so_proto_props.sopp_tail = tail; in so_set_prop()
1228 mutex_exit(&so->so_lock); in so_set_prop()
1242 so_queue_msg_impl(struct sonode *so, mblk_t *mp, in so_queue_msg_impl() argument
1248 sodirect_t *sodp = so->so_direct; in so_queue_msg_impl()
1253 if (so->so_downcalls->sd_recv_uio != NULL) { in so_queue_msg_impl()
1254 mutex_enter(&so->so_lock); in so_queue_msg_impl()
1257 so_notify_oobdata(so, IS_SO_OOB_INLINE(so)); in so_queue_msg_impl()
1259 so_notify_data(so, msg_size); in so_queue_msg_impl()
1263 mutex_enter(&so->so_lock); in so_queue_msg_impl()
1277 mutex_enter(&so->so_lock); in so_queue_msg_impl()
1283 if (so->so_filter_active > 0) { in so_queue_msg_impl()
1295 mutex_enter(&so->so_lock); in so_queue_msg_impl()
1301 mutex_enter(&so->so_lock); in so_queue_msg_impl()
1302 if (so->so_krecv_cb != NULL) { in so_queue_msg_impl()
1304 so_krecv_f func = so->so_krecv_cb; in so_queue_msg_impl()
1305 void *arg = so->so_krecv_arg; in so_queue_msg_impl()
1307 mutex_exit(&so->so_lock); in so_queue_msg_impl()
1308 cont = func(so, mp, msg_size, flags & MSG_OOB, arg); in so_queue_msg_impl()
1309 mutex_enter(&so->so_lock); in so_queue_msg_impl()
1311 space_left = so->so_rcvbuf; in so_queue_msg_impl()
1313 so->so_rcv_queued = so->so_rcvlowat; in so_queue_msg_impl()
1319 mutex_exit(&so->so_lock); in so_queue_msg_impl()
1322 so_queue_oob(so, mp, msg_size); in so_queue_msg_impl()
1323 mutex_enter(&so->so_lock); in so_queue_msg_impl()
1330 mutex_enter(&so->so_lock); in so_queue_msg_impl()
1331 if (so->so_state & (SS_FALLBACK_DRAIN | SS_FALLBACK_COMP)) { in so_queue_msg_impl()
1334 mutex_exit(&so->so_lock); in so_queue_msg_impl()
1338 if (so->so_state & (SS_CANTRCVMORE | SS_CLOSING)) { in so_queue_msg_impl()
1342 mutex_exit(&so->so_lock); in so_queue_msg_impl()
1356 so_enqueue_msg(so, mp, msg_size); in so_queue_msg_impl()
1364 so_enqueue_msg(so, mp, msgdsize(mp)); in so_queue_msg_impl()
1369 space_left = so->so_rcvbuf - so->so_rcv_queued; in so_queue_msg_impl()
1371 so->so_flowctrld = B_TRUE; in so_queue_msg_impl()
1376 if (force_push || so->so_rcv_queued >= so->so_rcv_thresh || in so_queue_msg_impl()
1377 so->so_rcv_queued >= so->so_rcv_wanted) { in so_queue_msg_impl()
1378 SOCKET_TIMER_CANCEL(so); in so_queue_msg_impl()
1382 so_notify_data(so, so->so_rcv_queued); in so_queue_msg_impl()
1387 } else if (so->so_rcv_timer_tid == 0) { in so_queue_msg_impl()
1389 SOCKET_TIMER_START(so); in so_queue_msg_impl()
1393 mutex_exit(&so->so_lock); in so_queue_msg_impl()
1398 space_left = so->so_rcvbuf - so->so_rcv_queued; in so_queue_msg_impl()
1400 so->so_flowctrld = B_TRUE; in so_queue_msg_impl()
1413 struct sonode *so = (struct sonode *)sock_handle; in so_queue_msg() local
1415 return (so_queue_msg_impl(so, mp, msg_size, flags, errorp, force_pushp, in so_queue_msg()
1416 so->so_filter_bottom)); in so_queue_msg()
1426 struct sonode *so; in so_signal_oob() local
1429 so = (struct sonode *)sock_handle; in so_signal_oob()
1430 mutex_enter(&so->so_lock); in so_signal_oob()
1431 if (so->so_direct != NULL) in so_signal_oob()
1432 SOD_UIOAFINI(so->so_direct); in so_signal_oob()
1438 so->so_state &= ~(SS_HAVEOOBDATA|SS_HADOOBDATA); in so_signal_oob()
1443 so->so_state |= SS_OOBPEND; in so_signal_oob()
1445 if (so->so_oobmsg != NULL) { in so_signal_oob()
1446 dprintso(so, 1, ("sock: discarding old oob\n")); in so_signal_oob()
1447 freemsg(so->so_oobmsg); in so_signal_oob()
1448 so->so_oobmsg = NULL; in so_signal_oob()
1454 so->so_oobmark = so->so_rcv_queued + offset; in so_signal_oob()
1455 if (so->so_oobmark == 0) in so_signal_oob()
1456 so->so_state |= SS_RCVATMARK; in so_signal_oob()
1458 so->so_state &= ~SS_RCVATMARK; in so_signal_oob()
1460 so_notify_oobsig(so); in so_signal_oob()
1467 so_queue_oob(struct sonode *so, mblk_t *mp, size_t len) in so_queue_oob() argument
1469 mutex_enter(&so->so_lock); in so_queue_oob()
1470 if (so->so_direct != NULL) in so_queue_oob()
1471 SOD_UIOAFINI(so->so_direct); in so_queue_oob()
1474 if (!IS_SO_OOB_INLINE(so)) { in so_queue_oob()
1475 so->so_oobmsg = mp; in so_queue_oob()
1476 so->so_state |= SS_HAVEOOBDATA; in so_queue_oob()
1478 so_enqueue_msg(so, mp, len); in so_queue_oob()
1481 so_notify_oobdata(so, IS_SO_OOB_INLINE(so)); in so_queue_oob()
1485 so_close(struct sonode *so, int flag, struct cred *cr) in so_close() argument
1492 mutex_enter(&so->so_lock); in so_close()
1493 so->so_state |= SS_CLOSING; in so_close()
1494 ASSERT(so_verify_oobstate(so)); in so_close()
1495 so_rcv_flush(so); in so_close()
1496 mutex_exit(&so->so_lock); in so_close()
1498 if (so->so_filter_active > 0) in so_close()
1499 sof_sonode_closing(so); in so_close()
1501 if (so->so_state & SS_ACCEPTCONN) { in so_close()
1509 mutex_enter(&so->so_acceptq_lock); in so_close()
1510 mutex_exit(&so->so_acceptq_lock); in so_close()
1512 so_acceptq_flush(so, B_TRUE); in so_close()
1515 error = (*so->so_downcalls->sd_close)(so->so_proto_handle, flag, cr); in so_close()
1519 VN_RELE(SOTOV(so)); in so_close()
1540 struct sonode *so = (struct sonode *)sock_handle; in so_closed() local
1542 VN_RELE(SOTOV(so)); in so_closed()
1548 sonode_t *so = (sonode_t *)sock_handle; in so_get_vnode() local
1551 vn = SOTOV(so); in so_get_vnode()
1560 struct sonode *so = (struct sonode *)sock_handle; in so_zcopy_notify() local
1562 mutex_enter(&so->so_lock); in so_zcopy_notify()
1563 so->so_copyflag |= STZCNOTIFY; in so_zcopy_notify()
1564 cv_broadcast(&so->so_copy_cv); in so_zcopy_notify()
1565 mutex_exit(&so->so_lock); in so_zcopy_notify()
1571 struct sonode *so = (struct sonode *)sock_handle; in so_set_error() local
1573 mutex_enter(&so->so_lock); in so_set_error()
1575 soseterror(so, error); in so_set_error()
1577 so_notify_error(so); in so_set_error()
1589 so_recvmsg(struct sonode *so, struct nmsghdr *msg, struct uio *uiop, in so_recvmsg() argument
1603 SO_BLOCK_FALLBACK(so, SOP_RECVMSG(so, msg, uiop, cr)); in so_recvmsg()
1605 if ((so->so_state & (SS_ISCONNECTED|SS_CANTRCVMORE)) == 0 && in so_recvmsg()
1606 (so->so_mode & SM_CONNREQUIRED)) { in so_recvmsg()
1607 SO_UNBLOCK_FALLBACK(so); in so_recvmsg()
1611 mutex_enter(&so->so_lock); in so_recvmsg()
1612 if (so->so_krecv_cb != NULL) { in so_recvmsg()
1613 mutex_exit(&so->so_lock); in so_recvmsg()
1616 mutex_exit(&so->so_lock); in so_recvmsg()
1621 if (so->so_mode & SM_ATOMIC) in so_recvmsg()
1625 if ((so->so_mode & SM_EXDATA) == 0) { in so_recvmsg()
1627 } else if (so->so_downcalls->sd_recv_uio != NULL) { in so_recvmsg()
1628 error = (*so->so_downcalls->sd_recv_uio) in so_recvmsg()
1629 (so->so_proto_handle, uiop, msg, cr); in so_recvmsg()
1631 error = sorecvoob(so, msg, uiop, msg->msg_flags, in so_recvmsg()
1632 IS_SO_OOB_INLINE(so)); in so_recvmsg()
1634 SO_UNBLOCK_FALLBACK(so); in so_recvmsg()
1642 if (so->so_downcalls->sd_recv_uio != NULL) { in so_recvmsg()
1643 error = (*so->so_downcalls->sd_recv_uio) in so_recvmsg()
1644 (so->so_proto_handle, uiop, msg, cr); in so_recvmsg()
1645 SO_UNBLOCK_FALLBACK(so); in so_recvmsg()
1664 mutex_enter(&so->so_lock); in so_recvmsg()
1666 error = so_lock_read_intr(so, in so_recvmsg()
1668 mutex_exit(&so->so_lock); in so_recvmsg()
1670 SO_UNBLOCK_FALLBACK(so); in so_recvmsg()
1674 suiop = sod_rcv_init(so, flags, &uiop); in so_recvmsg()
1677 error = so_dequeue_msg(so, &mctlp, uiop, &rval, flags); in so_recvmsg()
1686 if ((rval.r_val1 & MOREDATA) && (so->so_mode & SM_ATOMIC)) in so_recvmsg()
1689 dprintso(so, 1, ("so_recvmsg: got M_DATA\n")); in so_recvmsg()
1691 mutex_enter(&so->so_lock); in so_recvmsg()
1694 if (so->so_state & SS_SAVEDEOR) { in so_recvmsg()
1696 so->so_state &= ~SS_SAVEDEOR; in so_recvmsg()
1705 mutex_exit(&so->so_lock); in so_recvmsg()
1714 dprintso(so, 1, ("so_recvmsg: type %d\n", tpr->type)); in so_recvmsg()
1721 mutex_enter(&so->so_lock); in so_recvmsg()
1722 so->so_state &= ~SS_SAVEDEOR; in so_recvmsg()
1727 so->so_state |= SS_SAVEDEOR; in so_recvmsg()
1736 mutex_exit(&so->so_lock); in so_recvmsg()
1757 eprintsoline(so, error); in so_recvmsg()
1760 ASSERT(so->so_family != AF_UNIX); in so_recvmsg()
1776 eprintsoline(so, error); in so_recvmsg()
1779 if (so->so_family == AF_UNIX) in so_recvmsg()
1822 eprintsoline(so, error); in so_recvmsg()
1851 eprintsoline(so, error); in so_recvmsg()
1878 eprintsoline(so, error); in so_recvmsg()
1889 mutex_enter(&so->so_lock); in so_recvmsg()
1890 so->so_state &= ~SS_SAVEDEOR; in so_recvmsg()
1895 so->so_state |= SS_SAVEDEOR; in so_recvmsg()
1906 mutex_exit(&so->so_lock); in so_recvmsg()
1920 mutex_enter(&so->so_lock); in so_recvmsg()
1922 ret = sod_rcv_done(so, suiop, uiop); in so_recvmsg()
1926 so_unlock_read(so); /* Clear SOREADLOCKED */ in so_recvmsg()
1927 mutex_exit(&so->so_lock); in so_recvmsg()
1929 SO_UNBLOCK_FALLBACK(so); in so_recvmsg()