in src/network/_Private/socket_connect_async.php [23:55]
async function socket_connect_async(
OS\FileDescriptor $sock,
OS\sockaddr $sa,
int $timeout_ns,
): Awaitable<void> {
$opts = OS\fcntl($sock, OS\FcntlOp::F_GETFL);
OS\fcntl($sock, OS\FcntlOp::F_SETFL, ($opts as int) | OS\O_NONBLOCK);
try {
OS\connect($sock, $sa);
} catch (OS\BlockingIOException $_) {
// connect(2) documents non-blocking sockets as being ready for write
// when complete
try {
$res = await _OS\poll_async($sock, \STREAM_AWAIT_WRITE, $timeout_ns);
} catch (\Exception $e) {
throw $e;
}
if ($res === \STREAM_AWAIT_CLOSED) {
_OS\throw_errno(OS\Errno::ECONNRESET, 'connect');
}
if ($res === \STREAM_AWAIT_TIMEOUT) {
_OS\throw_errno(OS\Errno::ETIMEDOUT, 'connect');
}
$errno = _OS\wrap_impl(
() ==> _OS\getsockopt_int($sock, _OS\SOL_SOCKET, _OS\SO_ERROR),
);
if ($errno !== 0) {
_OS\throw_errno($errno as OS\Errno, 'connect() failed');
}
}
}