aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar zfl9 <zfl9.com@gmail.com> 2020-03-07 13:58:46 +0800
committerGravatar zfl9 <zfl9.com@gmail.com> 2020-03-07 13:58:46 +0800
commit851495b71c0538de11cf8ce2836eab9edb8c6c26 (patch)
treeb7c94c9a539ba6f4bb3e0f1964d7dbd844b7817b
parentuse libev instead of libuv (diff)
downloaddns2tcp-851495b71c0538de11cf8ce2836eab9edb8c6c26.tar.gz
dns2tcp-851495b71c0538de11cf8ce2836eab9edb8c6c26.tar.bz2
dns2tcp-851495b71c0538de11cf8ce2836eab9edb8c6c26.zip
use libev instead of libuv
-rw-r--r--dnsudp2tcp.c16
-rwxr-xr-xtestbin77424 -> 77424 bytes
2 files changed, 9 insertions, 7 deletions
diff --git a/dnsudp2tcp.c b/dnsudp2tcp.c
index cf700dc..be45d83 100644
--- a/dnsudp2tcp.c
+++ b/dnsudp2tcp.c
@@ -405,7 +405,7 @@ static void udp_recvmsg_cb(evloop_t *evloop, evio_t *watcher __attribute__((unus
if (g_syn_maxcnt) set_syncnt(sockfd, g_syn_maxcnt);
if (g_options & OPT_QUICK_ACK) set_quickack(sockfd);
- bool skip_connect = false;
+ bool tfo_succ = false;
if (g_options & OPT_FAST_OPEN) {
ssize_t nsend = sendto(sockfd, tcpw->buffer, nrecv, MSG_FASTOPEN, (void *)&g_remote_skaddr, g_remote_skaddr.sin6_family == AF_INET ? sizeof(skaddr4_t) : sizeof(skaddr6_t));
if (nsend < 0) {
@@ -415,7 +415,7 @@ static void udp_recvmsg_cb(evloop_t *evloop, evio_t *watcher __attribute__((unus
}
IF_VERBOSE LOGINF("[udp_recvmsg_cb] try to connect to %s#%hu", g_remote_ipstr, g_remote_portno);
} else {
- skip_connect = true;
+ tfo_succ = true;
tcpw->nrcvsnd = nsend;
IF_VERBOSE LOGINF("[udp_recvmsg_cb] tcp_fastopen connect, nsend:%zd", nsend);
}
@@ -427,11 +427,11 @@ static void udp_recvmsg_cb(evloop_t *evloop, evio_t *watcher __attribute__((unus
IF_VERBOSE LOGINF("[udp_recvmsg_cb] try to connect to %s#%hu", g_remote_ipstr, g_remote_portno);
}
- if (skip_connect && tcpw->nrcvsnd >= nrecv) {
+ if (tfo_succ && tcpw->nrcvsnd >= nrecv) {
tcpw->nrcvsnd = 0; /* reset to zero for recv data */
ev_io_init((evio_t *)tcpw, tcp_recvmsg_cb, sockfd, EV_READ);
} else {
- ev_io_init((evio_t *)tcpw, skip_connect ? tcp_sendmsg_cb : tcp_connect_cb, sockfd, EV_WRITE);
+ ev_io_init((evio_t *)tcpw, tfo_succ ? tcp_sendmsg_cb : tcp_connect_cb, sockfd, EV_WRITE);
}
ev_io_start(evloop, (evio_t *)tcpw);
return;
@@ -450,7 +450,7 @@ static void tcp_connect_cb(evloop_t *evloop, evio_t *watcher, int events __attri
free(watcher);
return;
}
- IF_VERBOSE LOGINF("[tcp_connect_cb] connected to %s#%hu", g_remote_ipstr, g_remote_portno);
+ IF_VERBOSE LOGINF("[tcp_connect_cb] connect to %s#%hu succeed", g_remote_ipstr, g_remote_portno);
ev_set_cb(watcher, tcp_sendmsg_cb);
ev_invoke(evloop, watcher, EV_WRITE);
}
@@ -495,11 +495,13 @@ static void tcp_recvmsg_cb(evloop_t *evloop, evio_t *watcher, int events __attri
IF_VERBOSE LOGINF("[tcp_recvmsg_cb] recv from %s#%hu, nrecv:%zd", g_remote_ipstr, g_remote_portno, nrecv);
if (tcpw->nrcvsnd < 2 || tcpw->nrcvsnd < 2 + ntohs(*(uint16_t *)buffer)) return;
- ssize_t nsend = sendto(g_udp_sockfd, buffer + 2, ntohs(*(uint16_t *)buffer), 0, (void *)&tcpw->srcaddr, sizeof(tcpw->srcaddr));
+ const void *sendto_skaddr = &tcpw->srcaddr;
+ socklen_t sendto_skaddrlen = tcpw->srcaddr.sin6_family == AF_INET ? sizeof(skaddr4_t) : sizeof(skaddr6_t);
+ ssize_t nsend = sendto(g_udp_sockfd, buffer + 2, ntohs(*(uint16_t *)buffer), 0, sendto_skaddr, sendto_skaddrlen);
if (nsend < 0) {
portno_t portno;
parse_socket_addr(&tcpw->srcaddr, g_ipstr_buf, &portno);
- LOGERR("[tcp_recvmsg_cb] send to %s#%hu failed: (%d) %s", g_ipstr_buf, portno, errno, strerror(errno));
+ LOGERR("[tcp_recvmsg_cb] send to %s#%hu: (%d) %s", g_ipstr_buf, portno, errno, strerror(errno));
} else {
IF_VERBOSE {
portno_t portno;
diff --git a/test b/test
index ecfc5c0..6935010 100755
--- a/test
+++ b/test
Binary files differ