mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-20 21:43:41 +00:00
Fix mishandling of incoming socket buffer. It must be set on the listening socket not the accepted socket.
This commit is contained in:
+8
-8
@@ -205,6 +205,14 @@ create_and_bind(const char *addr, const char *port)
|
||||
}
|
||||
}
|
||||
|
||||
if (tcp_incoming_sndbuf > 0) {
|
||||
setsockopt(listen_sock, SOL_SOCKET, SO_SNDBUF, &tcp_incoming_sndbuf, sizeof(int));
|
||||
}
|
||||
|
||||
if (tcp_incoming_rcvbuf > 0) {
|
||||
setsockopt(listen_sock, SOL_SOCKET, SO_RCVBUF, &tcp_incoming_rcvbuf, sizeof(int));
|
||||
}
|
||||
|
||||
s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen);
|
||||
if (s == 0) {
|
||||
/* We managed to bind successfully! */
|
||||
@@ -1406,14 +1414,6 @@ accept_cb(EV_P_ ev_io *w, int revents)
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));
|
||||
#endif
|
||||
|
||||
if (tcp_incoming_sndbuf > 0) {
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_SNDBUF, &tcp_incoming_sndbuf, sizeof(int));
|
||||
}
|
||||
|
||||
if (tcp_incoming_rcvbuf > 0) {
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_RCVBUF, &tcp_incoming_rcvbuf, sizeof(int));
|
||||
}
|
||||
|
||||
server_t *server = new_server(serverfd);
|
||||
server->listener = listener;
|
||||
|
||||
|
||||
+8
-8
@@ -201,6 +201,14 @@ create_and_bind(const char *addr, const char *port)
|
||||
LOGI("tcp tproxy mode enabled");
|
||||
}
|
||||
|
||||
if (tcp_incoming_sndbuf > 0) {
|
||||
setsockopt(listen_sock, SOL_SOCKET, SO_SNDBUF, &tcp_incoming_sndbuf, sizeof(int));
|
||||
}
|
||||
|
||||
if (tcp_incoming_rcvbuf > 0) {
|
||||
setsockopt(listen_sock, SOL_SOCKET, SO_RCVBUF, &tcp_incoming_rcvbuf, sizeof(int));
|
||||
}
|
||||
|
||||
s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen);
|
||||
if (s == 0) {
|
||||
/* We managed to bind successfully! */
|
||||
@@ -759,14 +767,6 @@ accept_cb(EV_P_ ev_io *w, int revents)
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));
|
||||
#endif
|
||||
|
||||
if (tcp_incoming_sndbuf > 0) {
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_SNDBUF, &tcp_incoming_sndbuf, sizeof(int));
|
||||
}
|
||||
|
||||
if (tcp_incoming_rcvbuf > 0) {
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_RCVBUF, &tcp_incoming_rcvbuf, sizeof(int));
|
||||
}
|
||||
|
||||
int index = rand() % listener->remote_num;
|
||||
struct sockaddr *remote_addr = listener->remote_addr[index];
|
||||
|
||||
|
||||
+8
-8
@@ -620,6 +620,14 @@ create_and_bind(const char *host, const char *port, int mptcp)
|
||||
}
|
||||
}
|
||||
|
||||
if (tcp_incoming_sndbuf > 0) {
|
||||
setsockopt(listen_sock, SOL_SOCKET, SO_SNDBUF, &tcp_incoming_sndbuf, sizeof(int));
|
||||
}
|
||||
|
||||
if (tcp_incoming_rcvbuf > 0) {
|
||||
setsockopt(listen_sock, SOL_SOCKET, SO_RCVBUF, &tcp_incoming_rcvbuf, sizeof(int));
|
||||
}
|
||||
|
||||
// Enable out-of-tree mptcp
|
||||
if (mptcp == 1) {
|
||||
int i = 0;
|
||||
@@ -1769,14 +1777,6 @@ accept_cb(EV_P_ ev_io *w, int revents)
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));
|
||||
#endif
|
||||
|
||||
if (tcp_incoming_sndbuf > 0) {
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_SNDBUF, &tcp_incoming_sndbuf, sizeof(int));
|
||||
}
|
||||
|
||||
if (tcp_incoming_rcvbuf > 0) {
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_RCVBUF, &tcp_incoming_rcvbuf, sizeof(int));
|
||||
}
|
||||
|
||||
setnonblocking(serverfd);
|
||||
|
||||
server_t *server = new_server(serverfd, listener);
|
||||
|
||||
+8
-8
@@ -166,6 +166,14 @@ create_and_bind(const char *addr, const char *port)
|
||||
}
|
||||
}
|
||||
|
||||
if (tcp_incoming_sndbuf > 0) {
|
||||
setsockopt(listen_sock, SOL_SOCKET, SO_SNDBUF, &tcp_incoming_sndbuf, sizeof(int));
|
||||
}
|
||||
|
||||
if (tcp_incoming_rcvbuf > 0) {
|
||||
setsockopt(listen_sock, SOL_SOCKET, SO_RCVBUF, &tcp_incoming_rcvbuf, sizeof(int));
|
||||
}
|
||||
|
||||
s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen);
|
||||
if (s == 0) {
|
||||
/* We managed to bind successfully! */
|
||||
@@ -725,14 +733,6 @@ accept_cb(EV_P_ ev_io *w, int revents)
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));
|
||||
#endif
|
||||
|
||||
if (tcp_incoming_sndbuf > 0) {
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_SNDBUF, &tcp_incoming_sndbuf, sizeof(int));
|
||||
}
|
||||
|
||||
if (tcp_incoming_rcvbuf > 0) {
|
||||
setsockopt(serverfd, SOL_SOCKET, SO_RCVBUF, &tcp_incoming_rcvbuf, sizeof(int));
|
||||
}
|
||||
|
||||
int index = rand() % listener->remote_num;
|
||||
struct sockaddr *remote_addr = listener->remote_addr[index];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user