#include <sys/types.h>
#include <sys/socket.h>
#include <netiso/iso.h>
#include <stdio.h>
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; i<sa->siso_nlen; i++) {
printf(" %02x", sa->siso_data[i]);
}
printf(" } tsel: (", sa->siso_tlen);
for(/*i=sa->siso_nlen*/;
i<sa->siso_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;
}