#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 %s \n", argv[0]); 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) ; } 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 the date as %s\n", buff); close(connfd); } }