diff --git a/assets/shadowsocks b/assets/shadowsocks index bd43f562..e5dd30c3 100755 Binary files a/assets/shadowsocks and b/assets/shadowsocks differ diff --git a/jni/shadowsocks/local.c b/jni/shadowsocks/local.c index c57766fc..6581c306 100644 --- a/jni/shadowsocks/local.c +++ b/jni/shadowsocks/local.c @@ -157,7 +157,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) { response.ver = VERSION; response.method = 0; char *send_buf = (char *)&response; - send(server->fd, send_buf, sizeof(response), MSG_NOSIGNAL); + send(server->fd, send_buf, sizeof(response), 0); server->stage = 1; return; } else if (server->stage == 1) { @@ -171,7 +171,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) { response.rsv = 0; response.atyp = 1; char *send_buf = (char *)&response; - send(server->fd, send_buf, 4, MSG_NOSIGNAL); + send(server->fd, send_buf, 4, 0); close_and_free_remote(EV_A_ remote); close_and_free_server(EV_A_ server); return; @@ -225,7 +225,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) { = (unsigned short) htons(atoi(_remote_port)); int reply_size = 4 + sizeof(struct in_addr) + sizeof(unsigned short); - int r = send(server->fd, server->buf, reply_size, MSG_NOSIGNAL); + int r = send(server->fd, server->buf, reply_size, 0); if (r < reply_size) { LOGE("header not complete sent\n"); close_and_free_remote(EV_A_ remote); @@ -334,7 +334,7 @@ static void remote_recv_cb (EV_P_ ev_io *w, int revents) { } } decrypt(server->buf, r, server->d_ctx); - int w = send(server->fd, server->buf, r, MSG_NOSIGNAL); + int w = send(server->fd, server->buf, r, 0); if(w < 0) { if (errno == EAGAIN) { // no data, wait for send @@ -670,6 +670,8 @@ int main (int argc, char **argv) fclose(file); } + signal(SIGPIPE, SIG_IGN); + // init global variables _server = strdup(server); _remote_port = strdup(remote_port); diff --git a/jni/termExec.cpp b/jni/termExec.cpp index a01c84bb..55623137 100644 --- a/jni/termExec.cpp +++ b/jni/termExec.cpp @@ -121,6 +121,8 @@ static int create_subprocess(const int rdt, const char *cmd, char *const argv[], if(pid == 0){ + signal(SIGPIPE, SIG_IGN); + if (envp) { for (; *envp; ++envp) { putenv(*envp); @@ -145,6 +147,9 @@ static int create_subprocess(const int rdt, const char *cmd, char *const argv[], exit(0); } else { + + signal(SIGPIPE, SIG_IGN); + *pProcessId = (int) pid; dup2(pfds[1], 1); diff --git a/libs/armeabi/libexec.so b/libs/armeabi/libexec.so index f16d8678..fe3c9fb3 100755 Binary files a/libs/armeabi/libexec.so and b/libs/armeabi/libexec.so differ