Browse Source

Refine TFO in ss-redir

pull/1474/head
Max Lv 8 years ago
parent
commit
e2c24d6ac8
1 changed files with 7 additions and 6 deletions
  1. 13
      src/redir.c

13
src/redir.c

@ -230,8 +230,6 @@ server_recv_cb(EV_P_ ev_io *w, int revents)
dns_ntop(AF_INET, &(sa->sin_addr), ipstr, INET_ADDRSTRLEN);
port = ntohs(sa->sin_port);
} else {
// TODO: The code below need to be test in IPv6 envirment, which I
// don't have.
struct sockaddr_in6 *sa = (struct sockaddr_in6 *)&(server->destaddr);
dns_ntop(AF_INET6, &(sa->sin6_addr), ipstr, INET6_ADDRSTRLEN);
port = ntohs(sa->sin6_port);
@ -465,8 +463,10 @@ remote_send_cb(EV_P_ ev_io *w, int revents)
}
if (r == 0) {
remote_send_ctx->connected = 1;
ev_io_stop(EV_A_ & remote_send_ctx->io);
ev_io_stop(EV_A_ & server->recv_ctx->io);
ev_io_start(EV_A_ & remote->recv_ctx->io);
ev_timer_start(EV_A_ & remote->recv_ctx->watcher);
// send destaddr
@ -530,8 +530,6 @@ remote_send_cb(EV_P_ ev_io *w, int revents)
bprepend(remote->buf, abuf, BUF_SIZE);
bfree(abuf);
ev_io_start(EV_A_ & remote->recv_ctx->io);
} else {
ERROR("getpeername");
// not connected
@ -553,13 +551,16 @@ remote_send_cb(EV_P_ ev_io *w, int revents)
s = sendto(remote->fd, remote->buf->data + remote->buf->idx,
remote->buf->len, MSG_FASTOPEN, remote->addr,
get_sockaddr_len(remote->addr));
if (s == -1 && (errno == EOPNOTSUPP || errno == EPROTONOSUPPORT ||
errno == ENOPROTOOPT)) {
fast_open = 0;
LOGE("fast open is not supported on this platform");
s = connect(remote->fd, remote->addr,
get_sockaddr_len(remote->addr));
close_and_free_remote(EV_A_ remote);
close_and_free_server(EV_A_ server);
return;
}
remote->addr = NULL;
if (s == -1) {

Loading…
Cancel
Save