This program must be compiled with the -D_BSD and -lbsd options. For example, use the cc prog.c -o prog -D_BSD -lbsd command.
/* * ATM Sockets PVC Server Example * * This program opens a PVC an receives data on it. * */ #include <stdio.h> #include <stddef.h> #include <stdlib.h> #include <errno.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <sys/ndd_var.h> #include <sys/atmsock.h> #define BUFF_SIZE 8192 char buff[BUFF_SIZE]; main(argc, argv) int argc; char *argv[]; { int s; // Socket file descriptor int error; // Function return code sockaddr_ndd_atm_t addr; // ATM Socket Address // Create a socket in the AF_NDD domain of type SOCK_CONN_DGRAM // and NDD_PROT_ATM protocol. s = socket(AF_NDD, SOCK_CONN_DGRAM, NDD_PROT_ATM); if (s == -1) { // Socket either returns the file descriptor perror("socket"); // or a -1 to indicate an error. exit(-1); } // The bind command associates this socket with a particular // ATM device, as specified by addr.sndd_atm_nddname. addr.sndd_atm_len = sizeof(addr); addr.sndd_atm_family = AF_NDD; strcpy( addr.sndd_atm_nddname, "atm0" ); // The name of the ATM device // which is to be used. error = bind( s, (struct sockaddr *)&addr, sizeof(addr) ); if (error) { // An error from bind would indicate the perror("bind"); // requested ATM device is not available. exit(-1); // Check smitty devices. } /* endif */ // To open a PVC, the addr.sndd_atm_vc_type field of the // sockaddr_ndd_atm is set to CONN_PVC. The VPI and VCI are // specified in the fields sndd_atm_addr.number.addr[0] and // sndd_atm_addr.number.addr[1]. addr.sndd_atm_vc_type = CONN_PVC; // Indicates PVC addr.sndd_atm_addr.number.addr[0] = 0; // VPI addr.sndd_atm_addr.number.addr[1] = 15; // VCI error = connect( s, (struct sockaddr *)&addr, sizeof(addr) ); if (error) { // A connect error may indicate that perror("connect"); // the VPI/VCI is already in use. exit(-1); } /* endif */ while (1) { error = recv( s, buff, BUFF_SIZE, 0 ); if (error < 0 ) { // Send returns -1 to perror("recv"); // to indicate an error. exit(-1); // The errno is set an can } else { // be displayed with perror. printf("received %d bytes\n", error ); // Or it returns the number } // of bytes received } /* endwhile */ exit(0); }