#include #include #include #include #include int main(){ int sk = socket(AF_INET6,SOCK_STREAM,0); printf("sk=%d\n",sk); struct sockaddr_in6 addr={0}; addr.sin6_family = AF_INET6; addr.sin6_port = htons(1111); assert(0==bind(sk,(struct sockaddr*)&addr,sizeof(addr))); assert(0==listen(sk,10)); struct sockaddr_in6 ca; int cal = sizeof(ca); int csk = accept(sk,(struct sockaddr*)&ca,&cal); char buf[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, &(ca.sin6_addr), buf, INET6_ADDRSTRLEN); printf("client=%s\n",buf); struct sockaddr_in6 sa; int sal = sizeof(sa); getsockopt(csk,SOL_IPV6,IP6T_SO_ORIGINAL_DST,&sa,&sal); inet_ntop(AF_INET6, &(sa.sin6_addr), buf, INET6_ADDRSTRLEN); printf("server=%s\n",buf); return 0; }