socket state = SOCKET_ESTABLISHED

Those browsers you mentioned used to create spare connections to the web server, occupying the sockets for quite a time. Firefox has option to limit concurrent connections in its configuration tab.

You did not publish your code, but you must ensure that after server completes communicating from its side it performs DISCON and then (without waiting) performs CLOSE, and then OPEN, and LISTEN. Faster you do this process, less time you will have with socket being offline.

If you perform as I explained above, your clinet really connects (and you can confirm it wit Wireshark) but server does not send a data then the fault is in server’s code.