From 851495b71c0538de11cf8ce2836eab9edb8c6c26 Mon Sep 17 00:00:00 2001 From: zfl9 Date: Sat, 7 Mar 2020 13:58:46 +0800 Subject: use libev instead of libuv --- dnsudp2tcp.c | 16 +++++++++------- test | Bin 77424 -> 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 Binary files a/test and b/test differ -- cgit v1.2.3