#include #include #include #include const char NR[]= "UUUUUUUUUUUUUUUU\n"; #define NRL sizeof(NR) char buf[256]; #define Nbuf sizeof(buf) void isoprint(struct sockaddr_iso *sa, socklen_t len) { int i; if (sa->siso_family != AF_ISO) { printf("Family not AF_ISO (%d), but %d\n", AF_ISO, sa->siso_family); return; } if (len < sa->siso_len) { printf("sockaddr len truncated(%d < %d)\n", len, sa->siso_len); } printf("nsap: [%d]{", sa->siso_nlen); for(i=0; isiso_nlen; i++) { printf(" %02x", sa->siso_data[i]); } printf(" } tsel: (", sa->siso_tlen); for(/*i=sa->siso_nlen*/; isiso_nlen + sa->siso_tlen; i++) { printf(" %02x", sa->siso_data[i]); } printf(" )\n"); } int main() { int s,r; int i,j; struct sockaddr_iso src,dst; socklen_t fromwherelen; struct sockaddr_iso myname; socklen_t mynamelen; struct sockaddr_iso fromwhere; memset(&src, 0, sizeof(src)); memset(&dst, 0, sizeof(src)); src.siso_len=sizeof(src); src.siso_family = AF_ISO; j=0; #if 0 src.siso_data[j++] = 0x12; src.siso_data[j++] = 0x34; src.siso_data[j++] = 0x56; #endif src.siso_nlen=j; src.siso_tlen = 0; src.siso_data[j++] = 55; dst.siso_len=sizeof(src); dst.siso_family = AF_ISO; s = socket(PF_ISO, SOCK_DGRAM, ISOPROTO_CLTP); if (s < 0) { err(1, "socket"); } r = bind(s, (struct sockaddr *) &src, sizeof(src)); if (r < 0) { err(1, "bind"); } mynamelen = sizeof(myname); r = getsockname(s, (struct sockaddr *)&myname, &mynamelen); if (r < 0) warn(1, "getsockname"); else isoprint(&myname,mynamelen); while (1) { fromwherelen=sizeof(fromwhere); r = recvfrom(s, buf, Nbuf, 0, (struct sockaddr *)&fromwhere, &fromwherelen); if (r < 0) err(1, "recv"); printf("Received message from "); isoprint(&fromwhere, fromwherelen); printf(":\n>>>%s<<<\n", buf); } return 0; }