aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar zfl9 <zfl9.com@gmail.com> 2020-03-07 09:39:45 +0800
committerGravatar zfl9 <zfl9.com@gmail.com> 2020-03-07 09:39:45 +0800
commit73941b2b14b6f2165ed8c67e926a1586698ecd88 (patch)
treec7237c8a703d8a06884bf05b3f8c5212d2ae1319
parentuse libev instead of libuv (diff)
downloaddns2tcp-73941b2b14b6f2165ed8c67e926a1586698ecd88.tar.gz
dns2tcp-73941b2b14b6f2165ed8c67e926a1586698ecd88.tar.bz2
dns2tcp-73941b2b14b6f2165ed8c67e926a1586698ecd88.zip
use libev instead of libuv
-rw-r--r--dnsudp2tcp.c30
-rwxr-xr-xtestbin77456 -> 77424 bytes
2 files changed, 14 insertions, 16 deletions
diff --git a/dnsudp2tcp.c b/dnsudp2tcp.c
index ceaa292..72374d1 100644
--- a/dnsudp2tcp.c
+++ b/dnsudp2tcp.c
@@ -81,8 +81,7 @@ enum {
static bool g_verbose = false;
static uint8_t g_options = 0;
static uint8_t g_syn_maxcnt = 0;
-static evloop_t *g_event_loop = NULL;
-static evio_t g_udp_watcher = {0};
+static int g_udp_sockfd = -1;
static char g_listen_ipstr[IP6STRLEN] = {0};
static portno_t g_listen_portno = 0;
static skaddr6_t g_listen_skaddr = {0};
@@ -354,29 +353,28 @@ int main(int argc, char *argv[]) {
if (g_options & OPT_FAST_OPEN) LOGINF("[main] enable TCP_FASTOPEN sockopt");
IF_VERBOSE LOGINF("[main] verbose mode, affect performance");
- g_event_loop = ev_default_loop(0);
-
- int sockfd = socket(g_listen_skaddr.sin6_family, SOCK_DGRAM, 0);
- if (sockfd < 0) {
+ g_udp_sockfd = socket(g_listen_skaddr.sin6_family, SOCK_DGRAM, 0);
+ if (g_udp_sockfd < 0) {
LOGERR("[main] create udp socket failed: (%d) %s", errno, strerror(errno));
return errno;
}
- set_nonblock(sockfd);
- set_reuseaddr(sockfd);
- if (g_options & OPT_REUSE_PORT) set_reuseport(sockfd);
- if (g_options & OPT_IPV6_V6ONLY) set_ipv6only(sockfd);
+ set_nonblock(g_udp_sockfd);
+ set_reuseaddr(g_udp_sockfd);
+ if (g_options & OPT_REUSE_PORT) set_reuseport(g_udp_sockfd);
+ if (g_options & OPT_IPV6_V6ONLY) set_ipv6only(g_udp_sockfd);
- if (bind(sockfd, (void *)&g_listen_skaddr, g_listen_skaddr.sin6_family == AF_INET ? sizeof(skaddr4_t) : sizeof(skaddr6_t)) < 0) {
+ if (bind(g_udp_sockfd, (void *)&g_listen_skaddr, g_listen_skaddr.sin6_family == AF_INET ? sizeof(skaddr4_t) : sizeof(skaddr6_t)) < 0) {
LOGERR("[main] bind udp address failed: (%d) %s", errno, strerror(errno));
return errno;
}
- evio_t *udp_watcher = &g_udp_watcher; /* suppress warning */
- ev_io_init(udp_watcher, udp_recvmsg_cb, sockfd, EV_READ);
- ev_io_start(g_event_loop, udp_watcher);
+ evloop_t *evloop = ev_default_loop(0);
+ evio_t *watcher = &(evio_t){0};
+ ev_io_init(watcher, udp_recvmsg_cb, g_udp_sockfd, EV_READ);
+ ev_io_start(evloop, watcher);
- ev_run(g_event_loop, 0);
+ ev_run(evloop, 0);
return 0;
}
@@ -491,7 +489,7 @@ 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_watcher.fd, buffer + 2, ntohs(*(uint16_t *)buffer), 0, (void *)&tcpw->srcaddr, sizeof(tcpw->srcaddr));
+ ssize_t nsend = sendto(g_udp_sockfd, buffer + 2, ntohs(*(uint16_t *)buffer), 0, (void *)&tcpw->srcaddr, sizeof(tcpw->srcaddr));
if (nsend < 0) {
portno_t portno;
parse_sock_addr(&tcpw->srcaddr, g_ipstr_buf, &portno);
diff --git a/test b/test
index 9e84914..88f17ff 100755
--- a/test
+++ b/test
Binary files differ