/* aasend.c */ /* This program sends stdin to an atm socket */ #include #include #include #include #include #include #ifdef GLIBC_PATCH #include #undef __GLIBC__ #include #include #else #include #include #endif char buf[1024] = "This is a test"; int main( int argc, char **argv) { struct sockaddr_atmpvc addr; struct atm_qos qos; int s,size,offset; int rc; int vci = 32; int count = 0; if (argc > 1) sscanf(argv[1], "%d", &vci); s = socket(PF_ATMPVC,SOCK_DGRAM,ATM_AAL5); printf("Socket call returned %d \n", s); qos.aal = 5; qos.txtp.traffic_class = ATM_UBR; qos.txtp.max_sdu = 768; qos.txtp.max_pcr = 5 * 1024 * 1024; qos.txtp.min_pcr = 1 * 1024 * 1024; qos.txtp.max_cdv = 1 * 1024 * 1024; qos.rxtp.traffic_class = ATM_UBR; qos.rxtp.max_sdu = 768; qos.rxtp.max_pcr = 5 * 1024 * 1024; qos.rxtp.min_pcr = 1 * 1024 * 1024; qos.rxtp.max_cdv = 1 * 1024 * 1024; rc = setsockopt(s, SOL_ATM, SO_ATMQOS, &qos, sizeof(qos)); printf("Return from setsock is %d \n", rc); addr.sap_family = AF_ATMPVC; addr.sap_addr.itf = 0; addr.sap_addr.vpi = 0; addr.sap_addr.vci = vci; while (rc = connect(s,(struct sockaddr *) &addr,sizeof(addr))) { count += 1; if (count >= 3) { printf("Connection on vci %d refused \n", vci); exit(1); } sleep(1); } printf("Return from connect is %d \n", rc); rc = read(0, buf, 768); while (rc > 0) { rc = write(s, buf, rc); printf("wrote %d \n", rc); if (rc < 0) { printf("Write socket returned %d \n", rc); break; } rc = read(0, buf, 768); } close(s); }