mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-11-02 07:53:43 +00:00
fix the timer of udprelay
This commit is contained in:
+9
-3
@@ -565,6 +565,7 @@ static void query_resolve_cb(struct sockaddr *addr, void *data)
|
||||
(void *)remote_ctx);
|
||||
|
||||
ev_io_start(EV_A_ & remote_ctx->io);
|
||||
ev_timer_start(EV_A_ & remote_ctx->watcher);
|
||||
}
|
||||
|
||||
} else {
|
||||
@@ -593,9 +594,6 @@ static void remote_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
LOGI("[udp] remote receive a packet");
|
||||
}
|
||||
|
||||
// triger the timer
|
||||
ev_timer_again(EV_A_ & remote_ctx->watcher);
|
||||
|
||||
struct sockaddr src_addr;
|
||||
socklen_t src_addr_len = sizeof(src_addr);
|
||||
char *buf = malloc(BUF_SIZE);
|
||||
@@ -690,15 +688,21 @@ static void remote_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
(struct sockaddr *)&remote_ctx->src_addr, remote_src_addr_len);
|
||||
if (s == -1) {
|
||||
ERROR("[udp] remote_recv_sendto");
|
||||
goto CLEAN_UP;
|
||||
}
|
||||
#else
|
||||
int s = sendto(server_ctx->fd, buf, buf_len, 0,
|
||||
(struct sockaddr *)&remote_ctx->src_addr, remote_src_addr_len);
|
||||
if (s == -1) {
|
||||
ERROR("[udp] remote_recv_sendto");
|
||||
goto CLEAN_UP;
|
||||
}
|
||||
#endif
|
||||
|
||||
// handle the UDP packet sucessfully,
|
||||
// triger the timer
|
||||
ev_timer_again(EV_A_ & remote_ctx->watcher);
|
||||
|
||||
CLEAN_UP:
|
||||
free(buf);
|
||||
|
||||
@@ -1004,6 +1008,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
|
||||
// Start remote io
|
||||
ev_io_start(EV_A_ & remote_ctx->io);
|
||||
ev_timer_start(EV_A_ & remote_ctx->watcher);
|
||||
}
|
||||
|
||||
if (offset > 0) {
|
||||
@@ -1062,6 +1067,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
(void *)remote_ctx);
|
||||
|
||||
ev_io_start(EV_A_ & remote_ctx->io);
|
||||
ev_timer_start(EV_A_ & remote_ctx->watcher);
|
||||
}
|
||||
} else {
|
||||
ERROR("[udp] bind() error");
|
||||
|
||||
Reference in New Issue
Block a user