#include "def" int main(int argc, char **argv) { int sockfd, n; int len; char buff[1024]; struct sockaddr_in6 servaddr, cliaddr; if (argc != 3) { perror("usage: a.out "); exit(-1); } if ( (sockfd = socket(AF_INET6, SOCK_STREAM, IPPROTO_SCTP)) < 0){ perror("socket error"); exit(-1); } bzero(&servaddr, sizeof(servaddr)); servaddr.sin6_family = AF_INET6 ; if ( inet_pton(AF_INET6, argv[1], &servaddr.sin6_addr) <= 0) { perror("inet_pton error for"); exit(-1); } servaddr.sin6_port = htons(atoi(argv[2])); /* daytime server */ if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0) { perror("connect error"); exit(-1); } write(sockfd,"HI",2); len = sizeof(cliaddr); getsockname(sockfd, (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(sockfd, (SA *) &servaddr, &len); printf("My peer: %s, port %d\n", inet_ntop(AF_INET6, &servaddr.sin6_addr, buff, sizeof(buff)), ntohs(servaddr.sin6_port)); while ( (n = read(sockfd, buff, 1024)) > 0) { buff[n] = 0; /* null terminate */ printf("Got: %s\n", buff); } if (n < 0){ perror("read error"); exit(-1); } exit(0); }