+ int ret;
+#ifdef SOCKET_MISDN
+ unsigned long on = 1;
+ struct sockadd_mISDN addr;
+
+ if (mISDNport->b_socket[i])
+ {
+ PERROR("Error: Socket already created for index %d\n", i);
+ return(0);
+ }
+
+ /* open socket */
+ mISDNport->b_socket[i] = socket(PF_ISDN, SOCK_DGRAM, ISDN_P_B_L2DSP);
+ if (mISDNport->b_socket[i])
+ {
+ PERROR("Error: Failed to open bchannel-socket for index %d with mISDN-DSP layer. Did you load mISDNdsp.ko?\n", i);
+ return(0);
+ }
+
+ /* set nonblocking io */
+ ret = ioctl(mISDNport->b_socket[i], FIONBIO, &on);
+ if (ret < 0)
+ {
+ PERROR("Error: Failed to set bchannel-socket index %d into nonblocking IO\n", i);
+ close(mISDNport->b_socket[i]);
+ mISDNport->b_socket[i] = -1;
+ return(0);
+ }
+
+ /* bind socket to bchannel */
+ addr.family = AF_ISDN;
+ addr.dev = mISDNport->port-1;
+ addr.channel = i+1+(i>=15);
+ ret = bind(di->bchan, (struct sockaddr *)&addr, sizeof(addr));
+ if (ret < 0)
+ {
+ PERROR("Error: Failed to bind bchannel-socket for index %d with mISDN-DSP layer. Did you load mISDNdsp.ko?\n", i);
+ close(mISDNport->b_socket[i]);
+ mISDNport->b_socket[i] = -1;
+ return(0);
+ }
+
+ chan_trace_header(mISDNport, mISDNport->b_port[i], "BCHANNEL create socket", DIRECTION_OUT);
+ add_trace("channel", NULL, "%d", i+1+(i>=15));
+ add_trace("socket", NULL, "%d", mISDNport->b_socket[i]);
+ end_trace();
+#else