uSockets icon indicating copy to clipboard operation
uSockets copied to clipboard

us_socket_context_connect timeout

Open federicorossi opened this issue 2 years ago • 6 comments

Can we configure the timeout of us_socket_context_connect? Testing the code I can see it is 20s but not how to configure it or where it comes from. It is to control the connection time when the server is down.

federicorossi avatar Sep 04 '23 23:09 federicorossi

We don't provide any timeout. That timeout comes from the OS. You control the timeout in your OS, or use us_socket_timeout on the connecting socket.

uNetworkingAB avatar Sep 05 '23 02:09 uNetworkingAB

Thank you. I think that to use us_socket_timeout the us_socket_context_connect has to finish first. The problem I am facing is to control the timeout for the connect. Do you know how to change the OS timeout?

federicorossi avatar Sep 05 '23 02:09 federicorossi

You don't need to wait. us_socket_context_connect returns a us_socket_t and you can start a timeout directly when it returns. The only thing that can take time inside us_socket_context_connect is if you pass it some domain name that doesn't resolve immediately. But you can solve that by resolving the domain to an IP yourself, before you call us_socket_context_connect.

uNetworkingAB avatar Sep 05 '23 02:09 uNetworkingAB

I am passing a local IP address and port that is not assigned to any device on purpose to try to limit the timeout and it takes 20s to return the socket. Is there a way to make the us_socket_context_connect to exit from another thread?

federicorossi avatar Sep 05 '23 02:09 federicorossi

us_socket_context_connect calls some hostname resolving syscall that hangs until done. So you cannot abort it. Just make sure whatever you pass us_socket_context_connect actually resolves to something and it should return immediately. You can do this by resolving whatever you want to connect to before you pass it to us_socket_context_connect.

uNetworkingAB avatar Sep 05 '23 05:09 uNetworkingAB

Thank you, I will do that. As I am passing the IP address I think the hostname resolution could be bypassed. If you could point out what function the hostname resolution I could locally patch it. Perhaps it could be also addressed later as an improvement to the library.

federicorossi avatar Sep 05 '23 16:09 federicorossi