SCTP Programmer's Guide

perror("listen");
exit(1);
}
memset (&sri, 0, sizeof(sri));
printf ("{one-to-one}: Waiting for associations ...\n");
FD_ZERO(&fdset);
FD_SET(fd, &fdset);
/* Wait for new associations */
while(1) {
if (select (fd+1, &fdset, 0, 0, 0) <= 0)
continue;
new_fd = accept (fd, (struct sockaddr *) &cli_addr, (socklen_t *) &le);
if (new_fd >=0 )
printf ("\n Connection from: %s\n", inet_ntoa(cli_addr.sin_addr));
/* Not interested in any events for now */
memset (&event, 0, sizeof(event));
if (setsockopt(new_fd, IPPROTO_SCTP, SCTP_EVENTS, &event, sizeof(event)) != 0) {
perror("setevent failed");
exit(1);
}
while (1) {
/* Echo back any and all data */
memset (readbuf, 0, sizeof(readbuf));
len = sizeof (struct sockaddr_in);
#if 0
sz = recv(new_fd, readbuf, sizeof(readbuf), 0);
if (debug)
printf ("recv:[%d,e:%d]: ", sz, errno);
#endif
sz = sctp_recvmsg (new_fd, readbuf, sizeof(readbuf),
0, 0, &sri, 0);
if (debug) printf ("sctp_recvmsg:[%d,e:%d,fl:%X]: ", sz, errno, msg_flags);
if (sz <= 0)
break;
printf ("<-- %s on str: %d\n", readbuf,
sri.sinfo_stream);
sz = sctp_sendmsg (new_fd, readbuf, sz, 0, len, 0, 0,
sri.sinfo_stream, 0, 0);
if (debug)
printf ("sctp_sendmsg:[%d,e:%d]\n", sz, errno);
}
close(new_fd);
}
/* unreachable */
close(fd);
}
One-to-Many Server Program
The following sample program is an implementation of an echo server over SCTP in
a one-to-many association:
Sample Server Programs 77