When going through the code of FreeBSD12, I see that the socket code has undergone significant change.
The socket is now either a regular socket or a listen socket. The listen socket has two new fields besides others: sol_upcall and sol_upcallarg My understanding is that this callback will be used to notify the accept socket's consumers when the 3 way handshake is completed and the socket is ready to be accepted. However in soisconnected function, when the accept filter is set, the code still sets the receive socket buffer's upcall. Shouldn't we set the sol_upcall in line 3773 below instead. If not, when should the sol_upcall be set. An example will help clarify the usage. 3762 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3762> again: 3763 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3763> if ((so->so_options & SO_ACCEPTFILTER) == 0) { 3764 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3764> TAILQ_REMOVE(&head->sol_incomp, so, so_list); 3765 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3765> head->sol_incqlen--; 3766 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3766> TAILQ_INSERT_TAIL(&head->sol_comp, so, so_list); 3767 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3767> head->sol_qlen++; 3768 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3768> so->so_qstate = SQ_COMP; 3769 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3769> SOCK_UNLOCK(so); 3770 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3770> solisten_wakeup(head); /* unlocks */ 3771 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3771> } else { 3772 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3772> SOCKBUF_LOCK(&so->so_rcv); 3773 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3773> soupcall_set(so, SO_RCV, 3774 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3774> head->sol_accept_filter->accf_callback, 3775 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3775> head->sol_accept_filter_arg); 3776 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3776> so->so_options &= ~SO_ACCEPTFILTER; 3777 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3777> ret = head->sol_accept_filter->accf_callback(so, 3778 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3778> head->sol_accept_filter_arg, M_NOWAIT); 3779 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3779> if (ret == SU_ISCONNECTED) { 3780 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3780> soupcall_clear(so, SO_RCV); 3781 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3781> SOCKBUF_UNLOCK(&so->so_rcv); 3782 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3782> goto again; 3783 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3783> } 3784 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3784> SOCKBUF_UNLOCK(&so->so_rcv); 3785 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3785> SOCK_UNLOCK(so); 3786 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3786> SOLISTEN_UNLOCK(head); 3787 <https://svnweb.freebsd.org/base/head/sys/kern/uipc_socket.c?revision=349989&view=markup#l3787> } Dheeraj _______________________________________________ freebsd-net@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"