+ if (error != 0) {
+ sodealloc(so);
+ return ((struct socket *)0);
+ }
+
+ /* Call socket filters' sonewconn1 function if set */
+ kp = sotokextcb(so);
+ while (kp) {
+ if (kp->e_soif && kp->e_soif->sf_sonewconn) {
+ error = (int)(*kp->e_soif->sf_sonewconn)(so, connstatus, kp);
+ if (error == EJUSTRETURN) {
+ return so;
+ } else if (error != 0) {
+ sodealloc(so);
+ return NULL;
+ }
+ }
+ kp = kp->e_next;
+ }
+
+ if (soreserve(so, head->so_snd.sb_hiwat, head->so_rcv.sb_hiwat) ||
+ (*so->so_proto->pr_usrreqs->pru_attach)(so, 0, NULL)) {