No, that is not how it works.
If you set maxconn 100
on the frontend, haproxy will stop accepting new sockets from the kernel and they will queue up on the OS side.
A 503 can only be send with an established and accepted TCP connection. Not accepting TCP connection means not being able to send traffic to the other side.
If you configure maxconn 100
for a backend server on the other hand, then haproxy will queue the requests and when timeout queue
hits it would emit appropriate HTTP responses (IF and only if the frontend maxconn configuration is larger than that, otherwise requests are not accepted there anyway).
So it’s not a leak. Does haproxy use 100% of the CPU during this benchmark?