Lines Matching refs:so

132 sosdp_init(struct sonode *so, struct sonode *pso, struct cred *cr, int flags)  in sosdp_init()  argument
141 mutex_enter(&so->so_lock); in sosdp_init()
143 so->so_state |= (SS_ISBOUND | SS_ISCONNECTED | in sosdp_init()
145 sosdp_so_inherit(pso, so); in sosdp_init()
146 so->so_proto_props = pso->so_proto_props; in sosdp_init()
148 mutex_exit(&so->so_lock); in sosdp_init()
158 so->so_proto_handle = (sock_lower_handle_t)sdp_create(so, NULL, in sosdp_init()
159 so->so_family, SDP_CAN_BLOCK, upcalls, &sbl, cr, &error); in sosdp_init()
160 if (so->so_proto_handle == NULL) in sosdp_init()
163 so->so_rcvbuf = sbl.sbl_rxbuf; in sosdp_init()
164 so->so_rcvlowat = sbl.sbl_rxlowat; in sosdp_init()
165 so->so_sndbuf = sbl.sbl_txbuf; in sosdp_init()
166 so->so_sndlowat = sbl.sbl_txlowat; in sosdp_init()
214 sosdp_bind(struct sonode *so, struct sockaddr *name, socklen_t namelen, in sosdp_bind() argument
220 mutex_enter(&so->so_lock); in sosdp_bind()
221 so_lock_single(so); /* Set SOLOCKED */ in sosdp_bind()
223 ASSERT(MUTEX_HELD(&so->so_lock)); in sosdp_bind()
224 ASSERT(so->so_flag & SOLOCKED); in sosdp_bind()
227 if ((so->so_state & SS_ISBOUND) || name == NULL || namelen == 0) { in sosdp_bind()
233 eprintsoline(so, error); in sosdp_bind()
240 if (so->so_state & SS_CANTSENDMORE) { in sosdp_bind()
248 mutex_exit(&so->so_lock); in sosdp_bind()
250 error = sdp_bind((struct sdp_conn_struct_t *)so->so_proto_handle, in sosdp_bind()
253 mutex_enter(&so->so_lock); in sosdp_bind()
256 so->so_state |= SS_ISBOUND; in sosdp_bind()
258 eprintsoline(so, error); in sosdp_bind()
262 so_unlock_single(so, SOLOCKED); in sosdp_bind()
263 mutex_exit(&so->so_lock); in sosdp_bind()
266 ASSERT(MUTEX_HELD(&so->so_lock)); in sosdp_bind()
267 ASSERT(so->so_flag & SOLOCKED); in sosdp_bind()
277 sosdp_listen(struct sonode *so, int backlog, struct cred *cr) in sosdp_listen() argument
281 mutex_enter(&so->so_lock); in sosdp_listen()
282 so_lock_single(so); in sosdp_listen()
288 if (so->so_state & (SS_ISCONNECTING | SS_ISCONNECTED | in sosdp_listen()
291 eprintsoline(so, EINVAL); in sosdp_listen()
298 if (so->so_state & SS_ACCEPTCONN) { in sosdp_listen()
299 so->so_backlog = backlog; in sosdp_listen()
303 mutex_exit(&so->so_lock); in sosdp_listen()
305 error = sdp_listen((struct sdp_conn_struct_t *)so->so_proto_handle, in sosdp_listen()
308 mutex_enter(&so->so_lock); in sosdp_listen()
310 so->so_state |= (SS_ACCEPTCONN | SS_ISBOUND); in sosdp_listen()
311 so->so_backlog = backlog; in sosdp_listen()
313 eprintsoline(so, error); in sosdp_listen()
316 so_unlock_single(so, SOLOCKED); in sosdp_listen()
317 mutex_exit(&so->so_lock); in sosdp_listen()
327 sosdp_connect(struct sonode *so, struct sockaddr *name, in sosdp_connect() argument
332 mutex_enter(&so->so_lock); in sosdp_connect()
333 so_lock_single(so); in sosdp_connect()
339 if (so->so_state & (SS_ACCEPTCONN|SS_ISCONNECTED|SS_ISCONNECTING)) { in sosdp_connect()
340 if (so->so_state & SS_ISCONNECTED) { in sosdp_connect()
342 } else if (so->so_state & SS_ISCONNECTING) { in sosdp_connect()
347 eprintsoline(so, error); in sosdp_connect()
354 if (so->so_error != 0) { in sosdp_connect()
355 error = sogeterr(so, B_TRUE); in sosdp_connect()
356 eprintsoline(so, error); in sosdp_connect()
365 if (so->so_state & (SS_ISDISCONNECTING|SS_CANTRCVMORE| in sosdp_connect()
368 eprintsoline(so, error); in sosdp_connect()
372 eprintsoline(so, EINVAL); in sosdp_connect()
375 soisconnecting(so); in sosdp_connect()
376 mutex_exit(&so->so_lock); in sosdp_connect()
378 error = sdp_connect((struct sdp_conn_struct_t *)so->so_proto_handle, in sosdp_connect()
381 mutex_enter(&so->so_lock); in sosdp_connect()
386 error = sowaitconnected(so, fflag, 0); in sosdp_connect()
390 (void *)so, (void *)so->so_proto_handle, error)); in sosdp_connect()
399 so->so_state |= SS_ISBOUND; in sosdp_connect()
403 so->so_state &= ~SS_ISCONNECTING; in sosdp_connect()
407 so_unlock_single(so, SOLOCKED); in sosdp_connect()
408 mutex_exit(&so->so_lock); in sosdp_connect()
417 sosdp_recvmsg(struct sonode *so, struct nmsghdr *msg, struct uio *uiop, in sosdp_recvmsg() argument
427 if (!(so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING| in sosdp_recvmsg()
446 mutex_enter(&so->so_lock); in sosdp_recvmsg()
451 error = so_lock_read_intr(so, in sosdp_recvmsg()
454 mutex_exit(&so->so_lock); in sosdp_recvmsg()
458 mutex_exit(&so->so_lock); in sosdp_recvmsg()
460 if (!(so->so_state & SS_CANTRCVMORE)) { in sosdp_recvmsg()
465 (struct sdp_conn_struct_t *)so->so_proto_handle, msg, in sosdp_recvmsg()
472 mutex_enter(&so->so_lock); in sosdp_recvmsg()
473 so_unlock_read(so); in sosdp_recvmsg()
474 mutex_exit(&so->so_lock); in sosdp_recvmsg()
483 sosdp_sendmsg(struct sonode *so, struct nmsghdr *msg, struct uio *uiop, in sosdp_sendmsg() argument
490 ASSERT(so->so_type == SOCK_STREAM); in sosdp_sendmsg()
493 (void *)so, (void *)so->so_proto_handle)); in sosdp_sendmsg()
501 mutex_enter(&so->so_lock); in sosdp_sendmsg()
502 if (so->so_state & SS_CANTSENDMORE) { in sosdp_sendmsg()
503 mutex_exit(&so->so_lock); in sosdp_sendmsg()
507 if (so->so_error != 0) { in sosdp_sendmsg()
508 error = sogeterr(so, B_TRUE); in sosdp_sendmsg()
509 mutex_exit(&so->so_lock); in sosdp_sendmsg()
518 if (!(so->so_state & (SS_ISCONNECTING | SS_ISCONNECTED))) { in sosdp_sendmsg()
520 so->so_state)); in sosdp_sendmsg()
521 mutex_exit(&so->so_lock); in sosdp_sendmsg()
525 mutex_exit(&so->so_lock); in sosdp_sendmsg()
526 error = sdp_send((struct sdp_conn_struct_t *)so->so_proto_handle, in sosdp_sendmsg()
537 sosdp_getpeername(struct sonode *so, struct sockaddr *addr, socklen_t *addrlen, in sosdp_getpeername() argument
541 if (!accept && !(so->so_state & SS_ISCONNECTED)) { in sosdp_getpeername()
545 (struct sdp_conn_struct_t *)so->so_proto_handle, in sosdp_getpeername()
555 sosdp_getsockname(struct sonode *so, struct sockaddr *addr, socklen_t *addrlen, in sosdp_getsockname() argument
558 mutex_enter(&so->so_lock); in sosdp_getsockname()
560 if (!(so->so_state & SS_ISBOUND)) { in sosdp_getsockname()
564 if (so->so_family == AF_INET || so->so_family == AF_INET6) { in sosdp_getsockname()
566 *addrlen = (so->so_family == AF_INET6) ? in sosdp_getsockname()
569 addr->sa_family = so->so_family; in sosdp_getsockname()
571 mutex_exit(&so->so_lock); in sosdp_getsockname()
574 mutex_exit(&so->so_lock); in sosdp_getsockname()
576 (struct sdp_conn_struct_t *)so->so_proto_handle, in sosdp_getsockname()
586 sosdp_shutdown(struct sonode *so, int how, struct cred *cr) in sosdp_shutdown() argument
591 mutex_enter(&so->so_lock); in sosdp_shutdown()
592 so_lock_single(so); in sosdp_shutdown()
598 state_change = so->so_state; in sosdp_shutdown()
606 socantrcvmore(so); in sosdp_shutdown()
609 socantsendmore(so); in sosdp_shutdown()
612 socantsendmore(so); in sosdp_shutdown()
613 socantrcvmore(so); in sosdp_shutdown()
620 state_change = so->so_state & ~state_change; in sosdp_shutdown()
623 so->so_state |= SS_ISDISCONNECTING; in sosdp_shutdown()
625 so_notify_shutdown(so); in sosdp_shutdown()
629 (struct sdp_conn_struct_t *)so->so_proto_handle, how); in sosdp_shutdown()
632 mutex_enter(&so->so_lock); in sosdp_shutdown()
634 so_unlock_single(so, SOLOCKED); in sosdp_shutdown()
635 mutex_exit(&so->so_lock); in sosdp_shutdown()
651 sosdp_getsockopt(struct sonode *so, int level, int option_name, in sosdp_getsockopt() argument
662 mutex_enter(&so->so_lock); in sosdp_getsockopt()
683 eprintsoline(so, error); in sosdp_getsockopt()
690 eprintsoline(so, error); in sosdp_getsockopt()
700 value = so->so_type; in sosdp_getsockopt()
704 value = sogeterr(so, B_TRUE); in sosdp_getsockopt()
708 value = (so->so_state & SS_ACCEPTCONN) ? in sosdp_getsockopt()
720 value = (so->so_options & option_name); in sosdp_getsockopt()
729 option = &so->so_linger; in sosdp_getsockopt()
733 value = so->so_sndbuf; in sosdp_getsockopt()
738 value = so->so_rcvbuf; in sosdp_getsockopt()
743 value = so->so_sndlowat; in sosdp_getsockopt()
748 value = so->so_rcvlowat; in sosdp_getsockopt()
761 mutex_exit(&so->so_lock); in sosdp_getsockopt()
762 error = sdp_get_opt((struct sdp_conn_struct_t *)so->so_proto_handle, in sosdp_getsockopt()
764 mutex_enter(&so->so_lock); in sosdp_getsockopt()
769 eprintsoline(so, error); in sosdp_getsockopt()
789 mutex_exit(&so->so_lock); in sosdp_getsockopt()
798 sosdp_setsockopt(struct sonode *so, int level, int option_name, in sosdp_setsockopt() argument
804 if (so->so_state & SS_CANTSENDMORE) { in sosdp_setsockopt()
808 mutex_enter(&so->so_lock); in sosdp_setsockopt()
809 so_lock_single(so); in sosdp_setsockopt()
811 if (so->so_type == SOCK_STREAM) { in sosdp_setsockopt()
812 conn = (void *)so->so_proto_handle; in sosdp_setsockopt()
816 so->so_type, conn, level, option_name)); in sosdp_setsockopt()
819 mutex_exit(&so->so_lock); in sosdp_setsockopt()
822 mutex_enter(&so->so_lock); in sosdp_setsockopt()
850 eprintsoline(so, error); in sosdp_setsockopt()
859 eprintsoline(so, error); in sosdp_setsockopt()
879 so->so_linger.l_linger = l->l_linger; in sosdp_setsockopt()
881 so->so_linger.l_onoff = SO_LINGER; in sosdp_setsockopt()
882 so->so_options |= SO_LINGER; in sosdp_setsockopt()
884 so->so_linger.l_onoff = 0; in sosdp_setsockopt()
885 so->so_options &= ~SO_LINGER; in sosdp_setsockopt()
899 dprintso(so, 1, in sosdp_setsockopt()
902 so->so_options |= option_name; in sosdp_setsockopt()
904 dprintso(so, 1, in sosdp_setsockopt()
907 so->so_options &= ~option_name; in sosdp_setsockopt()
912 so->so_sndbuf = intvalue; in sosdp_setsockopt()
913 if (so->so_sndlowat > so->so_sndbuf) { in sosdp_setsockopt()
914 so->so_sndlowat = so->so_sndbuf; in sosdp_setsockopt()
918 so->so_rcvbuf = intvalue; in sosdp_setsockopt()
919 if (so->so_rcvlowat > so->so_rcvbuf) { in sosdp_setsockopt()
920 so->so_rcvlowat = so->so_rcvbuf; in sosdp_setsockopt()
924 if (so->so_sndlowat > so->so_sndbuf) { in sosdp_setsockopt()
925 so->so_sndlowat = so->so_sndbuf; in sosdp_setsockopt()
929 if (so->so_rcvlowat > so->so_rcvbuf) { in sosdp_setsockopt()
930 so->so_rcvlowat = so->so_rcvbuf; in sosdp_setsockopt()
939 dprintso(so, 1, in sosdp_setsockopt()
948 so_unlock_single(so, SOLOCKED); in sosdp_setsockopt()
949 mutex_exit(&so->so_lock); in sosdp_setsockopt()
956 sosdp_ioctl(struct sonode *so, int cmd, intptr_t arg, int mode, in sosdp_ioctl() argument
970 mutex_enter(&so->so_lock); in sosdp_ioctl()
972 so->so_state |= SS_NDELAY; in sosdp_ioctl()
974 so->so_state &= ~SS_NDELAY; in sosdp_ioctl()
976 mutex_exit(&so->so_lock); in sosdp_ioctl()
984 mutex_enter(&so->so_lock); in sosdp_ioctl()
988 so->so_state |= SS_ASYNC; in sosdp_ioctl()
991 so->so_state &= ~SS_ASYNC; in sosdp_ioctl()
993 mutex_exit(&so->so_lock); in sosdp_ioctl()
1002 mutex_enter(&so->so_lock); in sosdp_ioctl()
1004 error = (pid != so->so_pgrp) ? socket_chgpgrp(so, pid) : 0; in sosdp_ioctl()
1005 mutex_exit(&so->so_lock); in sosdp_ioctl()
1010 if (so_copyout(&so->so_pgrp, (void *)arg, in sosdp_ioctl()
1018 (struct sdp_conn_struct_t *)so->so_proto_handle, cmd, in sosdp_ioctl()
1038 (struct sdp_conn_struct_t *)so->so_proto_handle, cmd, in sosdp_ioctl()
1052 if (so->so_state & SS_ACCEPTCONN) { in sosdp_ioctl()
1055 mutex_enter(&so->so_lock); in sosdp_ioctl()
1057 (struct sdp_conn_struct_t *)so->so_proto_handle, in sosdp_ioctl()
1059 mutex_exit(&so->so_lock); in sosdp_ioctl()
1074 sosdp_poll(struct sonode *so, short events, int anyyet, short *reventsp, in sosdp_poll() argument
1080 so_state = so->so_state; in sosdp_poll()
1082 ASSERT(so->so_version != SOV_STREAM); in sosdp_poll()
1084 if (!(so_state & SS_ISCONNECTED) && (so->so_type == SOCK_STREAM)) { in sosdp_poll()
1094 if (so->so_error != 0 && in sosdp_poll()
1106 if (so->so_type == SOCK_STREAM) { in sosdp_poll()
1108 (struct sdp_conn_struct_t *)so->so_proto_handle, in sosdp_poll()
1117 if (sdp_polldata((struct sdp_conn_struct_t *)so->so_proto_handle, in sosdp_poll()
1122 if ((so_state & SS_CANTRCVMORE) || (so->so_acceptq_len > 0)) { in sosdp_poll()
1128 *phpp = &so->so_poll_list; in sosdp_poll()
1136 sosdp_close(struct sonode *so, int flag, struct cred *cr) in sosdp_close() argument
1140 mutex_enter(&so->so_lock); in sosdp_close()
1141 so_lock_single(so); in sosdp_close()
1149 soisdisconnected(so, 0); in sosdp_close()
1150 mutex_exit(&so->so_lock); in sosdp_close()
1155 error = sdp_disconnect((struct sdp_conn_struct_t *)so->so_proto_handle, in sosdp_close()
1158 mutex_enter(&so->so_lock); in sosdp_close()
1159 so_unlock_single(so, SOLOCKED); in sosdp_close()
1160 so_notify_disconnected(so, B_FALSE, error); in sosdp_close()
1167 sosdp_fini(struct sonode *so, struct cred *cr) in sosdp_fini() argument
1169 dprint(3, ("sosdp_fini: so:%p so_proto_handle:%p", (void *)so, in sosdp_fini()
1170 (void *)so->so_proto_handle)); in sosdp_fini()
1172 ASSERT(so->so_ops == &sosdp_sonodeops); in sosdp_fini()
1174 if (so->so_proto_handle != NULL) in sosdp_fini()
1175 sdp_close((struct sdp_conn_struct_t *)so->so_proto_handle); in sosdp_fini()
1176 so->so_proto_handle = NULL; in sosdp_fini()
1178 mutex_enter(&so->so_lock); in sosdp_fini()
1180 so_acceptq_flush(so, B_TRUE); in sosdp_fini()
1182 mutex_exit(&so->so_lock); in sosdp_fini()
1184 sonode_fini(so); in sosdp_fini()
1236 struct sonode *so = handle; in sdp_sock_connected() local
1238 ASSERT(so->so_type == SOCK_STREAM); in sdp_sock_connected()
1239 dprint(3, ("sosdp_connected C: so:%p so_proto_handle:%p", (void *)so, in sdp_sock_connected()
1240 (void *)so->so_proto_handle)); in sdp_sock_connected()
1242 mutex_enter(&so->so_lock); in sdp_sock_connected()
1243 ASSERT(so->so_proto_handle); /* closed conn */ in sdp_sock_connected()
1245 ASSERT(!(so->so_state & SS_ACCEPTCONN)); in sdp_sock_connected()
1246 soisconnected(so); in sdp_sock_connected()
1248 so_notify_connected(so); in sdp_sock_connected()
1258 struct sonode *so = handle; in sdp_sock_disconnected() local
1260 ASSERT(so->so_type == SOCK_STREAM); in sdp_sock_disconnected()
1262 (void *)so, (void *)so->so_proto_handle, error)); in sdp_sock_disconnected()
1264 mutex_enter(&so->so_lock); in sdp_sock_disconnected()
1265 ASSERT(so->so_proto_handle != NULL); /* closed conn */ in sdp_sock_disconnected()
1267 soisdisconnected(so, error); in sdp_sock_disconnected()
1268 so_notify_disconnected(so, B_FALSE, error); in sdp_sock_disconnected()
1278 struct sonode *so = handle; in sdp_sock_recv() local
1280 ASSERT(so->so_type == SOCK_STREAM); in sdp_sock_recv()
1282 mutex_enter(&so->so_lock); in sdp_sock_recv()
1283 so_notify_data(so, 0); in sdp_sock_recv()
1285 return (so->so_rcvbuf); in sdp_sock_recv()
1294 struct sonode *so = handle; in sdp_sock_xmitted() local
1297 (void *)so, (void *)so->so_proto_handle, writeable)); in sdp_sock_xmitted()
1298 mutex_enter(&so->so_lock); in sdp_sock_xmitted()
1299 ASSERT(so->so_proto_handle != NULL); /* closed conn */ in sdp_sock_xmitted()
1307 so_notify_writable(so); in sdp_sock_xmitted()
1309 mutex_exit(&so->so_lock); in sdp_sock_xmitted()
1320 struct sonode *so = handle; in sdp_sock_urgdata() local
1322 ASSERT(so->so_type == SOCK_STREAM); in sdp_sock_urgdata()
1324 mutex_enter(&so->so_lock); in sdp_sock_urgdata()
1326 ASSERT(so->so_proto_handle != NULL); /* closed conn */ in sdp_sock_urgdata()
1327 so_notify_oobsig(so); in sdp_sock_urgdata()
1336 struct sonode *so = handle; in sdp_sock_ordrel() local
1338 ASSERT(so->so_type == SOCK_STREAM); in sdp_sock_ordrel()
1341 (void *)so, (void *)so->so_proto_handle)); in sdp_sock_ordrel()
1342 mutex_enter(&so->so_lock); in sdp_sock_ordrel()
1343 socantrcvmore(so); in sdp_sock_ordrel()
1344 so_notify_eof(so); in sdp_sock_ordrel()
1350 struct sonode *so = handle; in sdp_sock_connfail() local
1352 dprint(3, ("sosdp_conn Failed: so:%p so_proto_handle:%p", (void *)so, in sdp_sock_connfail()
1353 (void *)so->so_proto_handle)); in sdp_sock_connfail()
1354 mutex_enter(&so->so_lock); in sdp_sock_connfail()
1355 ASSERT(so->so_proto_handle != NULL); /* closed conn */ in sdp_sock_connfail()
1356 so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING); in sdp_sock_connfail()
1357 so->so_error = (ushort_t)error; in sdp_sock_connfail()
1358 mutex_exit(&so->so_lock); in sdp_sock_connfail()
1359 cv_broadcast(&so->so_state_cv); in sdp_sock_connfail()