#include "def" #define MAXIDLETIME 1 main(argc, argv ) int argc; char *argv[]; { int sd; int i; struct sockaddr_in6 server; char buff[1024]; int rc; struct sockaddr_in6 cliaddr; time_t ticks; int len; if (argc != 2) { printf("usage %s \n", argv[0]); exit (-1); } server.sin6_family = AF_INET6; server.sin6_addr = in6addr_any; server.sin6_port = htons(atoi(argv[1])); i = MAXIDLETIME; sd = socket (AF_INET6,SOCK_SEQPACKET,IPPROTO_SCTP); setsockopt(sd, IPPROTO_SCTP, SCTP_AUTOCLOSE, &i, sizeof (i)) ; if ( bind( sd, (SA *) &server, sizeof(server) ) < 0 ){ printf("error binding\n"); exit(-1) ; } listen(sd, 1); len = sizeof(server); getsockname(sd, (SA *) &server, &len); printf("my end: %s, port %d\n", inet_ntop(AF_INET6, &server.sin6_addr, buff, sizeof(buff)), ntohs(server.sin6_port)); for(;;){ len = sizeof(cliaddr); rc = recvfrom (sd, buff, sizeof(buff), 0, (SA *) &cliaddr, &len); printf("got request from %s, port %d\n", inet_ntop(AF_INET6, &cliaddr.sin6_addr, buff, sizeof(buff)), ntohs(cliaddr.sin6_port)); ticks = time(NULL); snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks)); len = sizeof(cliaddr); sleep(1); if ((sendto(sd, buff, strlen(buff), 0, (SA *) &cliaddr, len)) < 0){ perror("sendto()"); } } }