On Sunday, 15 November 2020 at 00:05:08 UTC, Marcone wrote:
Socket s = new Socket(AddressFamily.INET, SocketType.STREAM);
s.connect(new InternetAddress("domain.com", 80));

I want that program raise an error if reach for example 30 seconds of timeout.

My program does something like this. (untested)

Socket s = new TcpSocket;
s.setOption(SocketOptionLevel.SOCKET, SocketOption.RCVTIMEO, 30.seconds); s.setOption(SocketOptionLevel.SOCKET, SocketOption.SNDTIMEO, 30.seconds);

auto addresses = getAddress("domain.com", 80);
bool isConnected;

foreach (address; addresses)
{
    try
    {
        s.connect(address);
        isConnected = true;
        break;
    }
    catch (SocketException e)
    {
        // Failed, try next address
        writeln(e.msg);
    }
}

if (!isConnected) return false;  // failed to connect

// Connected

You can tell whether a read timed out by looking at the amount of bytes read (when `Socket.receive` returns `Socket.ERROR`) and the value of `std.socket.lastSocketError` (and/or `core.stdc.errno.errno` equaling EAGAIN).

Reply via email to