#include "def" main(int argc, char *argv[]) { int listenfd, connfd; socklen_t len; struct sockaddr_in6 servaddr, cliaddr; char buff[1024]; time_t ticks; if (argc < 2){ printf("Usage DayTimeServer6SctpS \n"); exit(-1); } listenfd = socket (AF_INET6,SOCK_STREAM,IPPROTO_SCTP); servaddr.sin6_family = AF_INET6; servaddr.sin6_addr = in6addr_any; servaddr.sin6_port = htons(atoi(argv[1])); if ( bind( listenfd, (SA *) &servaddr, sizeof(servaddr) ) < 0 ){ printf("error binding\n"); exit(-1) ; } len = sizeof(cliaddr); getsockname(listenfd, (SA *) &cliaddr, &len); printf("My end: %s, port %d\n", inet_ntop(AF_INET6, &cliaddr.sin6_addr, buff, sizeof(buff)), ntohs(cliaddr.sin6_port)); listen(listenfd,1); for ( ; ; ) { len = sizeof(cliaddr); connfd = accept(listenfd, (SA *) &cliaddr, &len); printf("Connection from %s, port %d\n", inet_ntop(AF_INET6, &cliaddr.sin6_addr, buff, sizeof(buff)), ntohs(cliaddr.sin6_port)); len = sizeof(cliaddr); getsockname(connfd, (SA *) &cliaddr, &len); printf("My end: %s, port %d\n", inet_ntop(AF_INET6, &cliaddr.sin6_addr, buff, sizeof(buff)), ntohs(cliaddr.sin6_port)); len = sizeof(cliaddr); getpeername(connfd, (SA *) &cliaddr, &len); printf("Peer end: 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)); write(connfd, buff, strlen(buff)); printf("Wrote %s\n", buff); close(connfd); } }