From 936eea67b4cbdef9aff8b2b40f0760714b39964e Mon Sep 17 00:00:00 2001 From: Blaok Date: Mon, 27 Oct 2014 06:04:07 +0800 Subject: [PATCH] =?UTF-8?q?IPv6=E9=87=8D=E5=AE=9A=E5=90=91=E8=BD=AC?= =?UTF-8?q?=E5=8F=91=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原来有一个设定地址类型的选项。所以接下来看看能不能整合一下IPv4和IPv6。 --- src/redir.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/redir.c b/src/redir.c index a73da115..7ed267b2 100644 --- a/src/redir.c +++ b/src/redir.c @@ -397,10 +397,9 @@ static void remote_send_cb (EV_P_ ev_io *w, int revents) // send destaddr char *ss_addr_to_send = malloc(BUF_SIZE); ssize_t addr_len = 0; - ss_addr_to_send[addr_len++] = 1; + ss_addr_to_send[addr_len++] = 4; - // handle IP V4 only - size_t in_addr_len = sizeof(struct in_addr); + size_t in_addr_len = sizeof(struct in6_addr); memcpy(ss_addr_to_send + addr_len, &server->destaddr.sin6_addr, in_addr_len); addr_len += in_addr_len; memcpy(ss_addr_to_send + addr_len, &server->destaddr.sin6_port, 2); @@ -628,7 +627,6 @@ static void accept_cb (EV_P_ ev_io *w, int revents) //err = getdestaddr(listener, &destaddr); printf("Connet server %s, port %s.\n",listener->remote_addr->host,listener->remote_addr->port); socklen_t socklen = sizeof(destaddr); - //err = getsockopt(listener->fd, (listener->local.isIPv6()?SOL_IP6:SOL_IP), (listener->local.isIPv6()?IP6T_SO_ORIGINAL_DST:SO_ORIGINAL_DST), destaddr, &socklen); err = getsockopt(clientfd, SOL_IPV6, IP6T_SO_ORIGINAL_DST, &destaddr, &socklen); unsigned char * ipv6addrr=(unsigned char*)(&destaddr.sin6_addr); printf("sizeofaddr=%d connecting:",(int)(sizeof(destaddr.sin6_addr)));