mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-31 06:23:52 +00:00
fix issues
This commit is contained in:
@@ -8,6 +8,8 @@ libtool
|
||||
pid
|
||||
ss*
|
||||
stamp-h1
|
||||
.libs
|
||||
*.json
|
||||
|
||||
# Do not edit the following section
|
||||
# Edit Compile Debug Document Distribute
|
||||
|
||||
@@ -57,6 +57,11 @@ jconf_t *read_jconf(const char* file) {
|
||||
fclose(f);
|
||||
|
||||
obj = json_parse(buf);
|
||||
|
||||
if (obj == NULL) {
|
||||
FATAL("Invalid config file");
|
||||
}
|
||||
|
||||
if (obj->type == json_object) {
|
||||
int i, j;
|
||||
for (i = 0; i < obj->u.object.length; i++) {
|
||||
|
||||
+14
-14
@@ -66,7 +66,7 @@ int create_and_bind(const char *port) {
|
||||
int opt = 1;
|
||||
int err = setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
|
||||
if (err) {
|
||||
perror("setsocket");
|
||||
ERROR("setsocket");
|
||||
}
|
||||
|
||||
s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen);
|
||||
@@ -74,7 +74,7 @@ int create_and_bind(const char *port) {
|
||||
/* We managed to bind successfully! */
|
||||
break;
|
||||
} else {
|
||||
perror("bind");
|
||||
ERROR("bind");
|
||||
}
|
||||
|
||||
close(listen_sock);
|
||||
@@ -123,7 +123,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) {
|
||||
// continue to wait for recv
|
||||
return;
|
||||
} else {
|
||||
perror("server recv");
|
||||
ERROR("server recv");
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
@@ -142,7 +142,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) {
|
||||
ev_io_start(EV_A_ &remote->send_ctx->io);
|
||||
return;
|
||||
} else {
|
||||
perror("send");
|
||||
ERROR("send");
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
@@ -264,7 +264,7 @@ static void server_send_cb (EV_P_ ev_io *w, int revents) {
|
||||
server->buf_len, 0);
|
||||
if (s < 0) {
|
||||
if (errno != EAGAIN && errno != EWOULDBLOCK) {
|
||||
perror("send");
|
||||
ERROR("send");
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
}
|
||||
@@ -338,7 +338,7 @@ static void remote_recv_cb (EV_P_ ev_io *w, int revents) {
|
||||
// continue to wait for recv
|
||||
return;
|
||||
} else {
|
||||
perror("remote recv");
|
||||
ERROR("remote recv");
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
@@ -356,7 +356,7 @@ static void remote_recv_cb (EV_P_ ev_io *w, int revents) {
|
||||
ev_io_start(EV_A_ &server->send_ctx->io);
|
||||
return;
|
||||
} else {
|
||||
perror("send");
|
||||
ERROR("send");
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
@@ -394,7 +394,7 @@ static void remote_send_cb (EV_P_ ev_io *w, int revents) {
|
||||
ev_io_start(EV_A_ &remote->recv_ctx->io);
|
||||
return;
|
||||
} else {
|
||||
perror("getpeername");
|
||||
ERROR("getpeername");
|
||||
// not connected
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
@@ -412,7 +412,7 @@ static void remote_send_cb (EV_P_ ev_io *w, int revents) {
|
||||
remote->buf_len, 0);
|
||||
if (s < 0) {
|
||||
if (errno != EAGAIN && errno != EWOULDBLOCK) {
|
||||
perror("send");
|
||||
ERROR("send");
|
||||
// close and free
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
@@ -537,7 +537,7 @@ static void accept_cb (EV_P_ ev_io *w, int revents) {
|
||||
struct listen_ctx *listener = (struct listen_ctx *)w;
|
||||
int serverfd = accept(listener->fd, NULL, NULL);
|
||||
if (serverfd == -1) {
|
||||
perror("accept");
|
||||
ERROR("accept");
|
||||
return;
|
||||
}
|
||||
setnonblocking(serverfd);
|
||||
@@ -550,13 +550,13 @@ static void accept_cb (EV_P_ ev_io *w, int revents) {
|
||||
int index = clock() % listener->remote_num;
|
||||
int err = getaddrinfo(listener->remote_host[index], listener->remote_port, &hints, &res);
|
||||
if (err) {
|
||||
perror("getaddrinfo");
|
||||
ERROR("getaddrinfo");
|
||||
return;
|
||||
}
|
||||
|
||||
sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
|
||||
if (sockfd < 0) {
|
||||
perror("socket");
|
||||
ERROR("socket");
|
||||
close(sockfd);
|
||||
freeaddrinfo(res);
|
||||
return;
|
||||
@@ -567,10 +567,10 @@ static void accept_cb (EV_P_ ev_io *w, int revents) {
|
||||
timeout.tv_usec = 0;
|
||||
err = setsockopt(sockfd, SOL_SOCKET,
|
||||
SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));
|
||||
if (err) perror("setsockopt");
|
||||
if (err) ERROR("setsockopt");
|
||||
err = setsockopt(sockfd, SOL_SOCKET,
|
||||
SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
|
||||
if (err) perror("setsockopt");
|
||||
if (err) ERROR("setsockopt");
|
||||
setnonblocking(sockfd);
|
||||
|
||||
struct server *server = new_server(serverfd);
|
||||
|
||||
+12
-12
@@ -69,7 +69,7 @@ int create_and_bind(const char *host, const char *port) {
|
||||
int opt = 1;
|
||||
int err = setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
|
||||
if (err) {
|
||||
perror("setsocket");
|
||||
ERROR("setsocket");
|
||||
}
|
||||
|
||||
s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen);
|
||||
@@ -77,7 +77,7 @@ int create_and_bind(const char *host, const char *port) {
|
||||
/* We managed to bind successfully! */
|
||||
break;
|
||||
} else {
|
||||
perror("bind");
|
||||
ERROR("bind");
|
||||
}
|
||||
|
||||
close(listen_sock);
|
||||
@@ -102,14 +102,14 @@ struct remote *connect_to_remote(char *remote_host, char *remote_port, int timeo
|
||||
|
||||
int err = getaddrinfo(remote_host, remote_port, &hints, &res);
|
||||
if (err) {
|
||||
perror("getaddrinfo");
|
||||
ERROR("getaddrinfo");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// initilize remote socks
|
||||
sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
|
||||
if (sockfd < 0) {
|
||||
perror("socket");
|
||||
ERROR("socket");
|
||||
close(sockfd);
|
||||
freeaddrinfo(res);
|
||||
return NULL;
|
||||
@@ -153,7 +153,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) {
|
||||
// continue to wait for recv
|
||||
return;
|
||||
} else {
|
||||
perror("server recv");
|
||||
ERROR("server recv");
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
@@ -172,7 +172,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) {
|
||||
ev_io_stop(EV_A_ &server_recv_ctx->io);
|
||||
ev_io_start(EV_A_ &remote->send_ctx->io);
|
||||
} else {
|
||||
perror("server_recv_send");
|
||||
ERROR("server_recv_send");
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
}
|
||||
@@ -303,7 +303,7 @@ static void server_send_cb (EV_P_ ev_io *w, int revents) {
|
||||
server->buf_len, 0);
|
||||
if (s < 0) {
|
||||
if (errno != EAGAIN && errno != EWOULDBLOCK) {
|
||||
perror("server_send_send");
|
||||
ERROR("server_send_send");
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
}
|
||||
@@ -378,7 +378,7 @@ static void remote_recv_cb (EV_P_ ev_io *w, int revents) {
|
||||
// continue to wait for recv
|
||||
return;
|
||||
} else {
|
||||
perror("remote recv");
|
||||
ERROR("remote recv");
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
return;
|
||||
@@ -395,7 +395,7 @@ static void remote_recv_cb (EV_P_ ev_io *w, int revents) {
|
||||
ev_io_stop(EV_A_ &remote_recv_ctx->io);
|
||||
ev_io_start(EV_A_ &server->send_ctx->io);
|
||||
} else {
|
||||
perror("remote_recv_send");
|
||||
ERROR("remote_recv_send");
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
}
|
||||
@@ -448,7 +448,7 @@ static void remote_send_cb (EV_P_ ev_io *w, int revents) {
|
||||
}
|
||||
|
||||
} else {
|
||||
perror("getpeername");
|
||||
ERROR("getpeername");
|
||||
// not connected
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
@@ -467,7 +467,7 @@ static void remote_send_cb (EV_P_ ev_io *w, int revents) {
|
||||
remote->buf_len, 0);
|
||||
if (s < 0) {
|
||||
if (errno != EAGAIN && errno != EWOULDBLOCK) {
|
||||
perror("remote_send_send");
|
||||
ERROR("remote_send_send");
|
||||
// close and free
|
||||
close_and_free_remote(EV_A_ remote);
|
||||
close_and_free_server(EV_A_ server);
|
||||
@@ -604,7 +604,7 @@ static void accept_cb (EV_P_ ev_io *w, int revents) {
|
||||
struct listen_ctx *listener = (struct listen_ctx *)w;
|
||||
int serverfd = accept(listener->fd, NULL, NULL);
|
||||
if (serverfd == -1) {
|
||||
perror("accept");
|
||||
ERROR("accept");
|
||||
return;
|
||||
}
|
||||
setnonblocking(serverfd);
|
||||
|
||||
+11
-1
@@ -1,6 +1,10 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
@@ -12,6 +16,12 @@
|
||||
|
||||
#define INT_DIGITS 19 /* enough for 64 bit integer */
|
||||
|
||||
void ERROR(const char *s) {
|
||||
char *msg = strerror(errno);
|
||||
LOGE("%s: %s", s, msg);
|
||||
|
||||
}
|
||||
|
||||
char *itoa(int i) {
|
||||
/* Room for INT_DIGITS digits, - and '\0' */
|
||||
static char buf[INT_DIGITS + 2];
|
||||
@@ -35,7 +45,7 @@ char *itoa(int i) {
|
||||
|
||||
|
||||
void FATAL(const char *msg) {
|
||||
fprintf(stderr, "%s", msg);
|
||||
LOGE("%s", msg);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ while(0)
|
||||
while(0)
|
||||
|
||||
void FATAL(const char *msg);
|
||||
void ERROR(const char *s);
|
||||
void usage(void);
|
||||
void demonize(const char* path);
|
||||
char *itoa(int i);
|
||||
|
||||
Reference in New Issue
Block a user