mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-26 21:31:01 +01:00
MINOR: proto-tcp: make use of connect(AF_UNSPEC) for the pause
Currently the suspend/resume mechanism for listeners only works on Linux and we resort to a number of tricks involving shutdown+listen+shutdown to try to detect failures on other operating systems that do not support it. But on Linux connect(AF_UNSPEC) also works pretty well and is much cleaner. It still doesn't work on other operating systems but the error is easier to detect and appears safer. So let's switch to this.
This commit is contained in:
parent
7c9f756dcc
commit
8b6fc3d10e
@ -770,17 +770,12 @@ static void tcp_disable_listener(struct listener *l)
|
||||
*/
|
||||
static int tcp_suspend_receiver(struct receiver *rx)
|
||||
{
|
||||
struct listener *l = LIST_ELEM(rx, struct listener *, rx);
|
||||
socklen_t opt_val, opt_len;
|
||||
struct sockaddr sa;
|
||||
|
||||
if (shutdown(rx->fd, SHUT_WR) != 0)
|
||||
goto check_already_done; /* usually Solaris fails here */
|
||||
|
||||
if (listen(rx->fd, listener_backlog(l)) != 0)
|
||||
goto check_already_done; /* Usually OpenBSD fails here */
|
||||
|
||||
if (shutdown(rx->fd, SHUT_RD) != 0)
|
||||
goto check_already_done; /* show always be OK */
|
||||
sa.sa_family = AF_UNSPEC;
|
||||
if (connect(rx->fd, &sa, sizeof(sa)) < 0)
|
||||
goto check_already_done;
|
||||
|
||||
fd_stop_recv(rx->fd);
|
||||
return 1;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user