int fstack_connect()

in io/fstack-dpdk.cpp [250:275]


int fstack_connect(int sockfd, const struct sockaddr* addr, socklen_t addrlen, Timeout timeout) {
    int err = 0;
    while (true) {
        int ret = ff_connect(sockfd, (linux_sockaddr*) addr, addrlen);
        if (ret < 0) {
            auto e = errno;
            if (e == EINTR) {
                err = 1;
                continue;
            }
            if (e == EINPROGRESS || (e == EADDRINUSE && err == 1)) {
                ret = g_engine->wait_for_fd_writable(sockfd, timeout);
                if (ret < 0) return -1;
                socklen_t n = sizeof(err);
                ret = ff_getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &err, &n);
                if (ret < 0) return -1;
                if (err) {
                    errno = err;
                    return -1;
                }
                return 0;
            }
        }
        return ret;
    }
}