/* asvrecv.c */ /* This program recvs from an atm socket */ /* This version uses switched virtual circuits */ #include #include #include #include #include #include #include #include char buf[1024] = "This is a test"; unsigned char atmaddr[] = { 0x39, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0x99, 0x99, 0x01, 0x01, 0x18, 0x99, 0x99, 0x99, 0x99, 0x01, 0x04 }; int main( int argc, char **argv) { struct sockaddr_atmsvc addr; struct sockaddr_atmsvc conn; struct atm_qos qos; struct atm_blli blli; int connlen; int m, s, size, offset; int rc; int vci = 32; int count = 0; if (argc > 1) sscanf(argv[1], "%d", &vci); s = socket(PF_ATMSVC, SOCK_DGRAM, 0); printf("Socket call returned %d \n", s); memcpy(addr.sas_addr.prv, atmaddr, ATM_ESA_LEN); memset(addr.sas_addr.pub, 0, ATM_E164_LEN + 1); memset(&qos,0,sizeof(qos)); qos.aal = ATM_AAL5; qos.rxtp.traffic_class = qos.txtp.traffic_class = ATM_ANYCLASS; rc = setsockopt(s, SOL_ATM, SO_ATMQOS, &qos,sizeof(qos)); printf("Return from setsock is %d \n", rc); memset(&addr, 0, sizeof(addr)); addr.sas_family = AF_ATMSVC; addr.sas_addr.bhli.hl_type = ATM_HL_NONE; addr.sas_addr.blli = 0; rc = bind(s,(struct sockaddr *) &addr,sizeof(addr)); printf("Return from bind is %d \n", rc); rc =listen(s, 4); printf("Return from listen is %d \n", rc); m = accept(s, (struct sockaddr *)&conn, &connlen); printf("Return code from accept is %d\n", m); rc = read(m, buf, 768); while (rc > 0) { rc = write(1, buf, rc); if (rc < 0) { printf("Write socket returned %d \n", rc); break; } rc = read(m, buf, 768); } close(s); }