Example #1
0
CRYSTAX_LOCAL
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
{
    DBG("sockfd=%d, addrlen=%lu", sockfd, (unsigned long)addrlen);

    int extfd;
    if (!resolve(sockfd, NULL, &extfd, NULL, NULL))
        return -1;

    if (extfd == -1)
    {
        errno = EBADF;
        return -1;
    }

    int extconnfd = system_connect(extfd, addr, addrlen);
    if (extconnfd == -1)
        return -1;

    int connfd = alloc_fd(NULL, extconnfd, system::driver_t::instance());
    if (connfd < 0)
    {
        system_close(extconnfd);
        errno = EMFILE;
        return -1;
    }

    DBG("return fd=%d", connfd);
    return connfd;
}
Example #2
0
gint intercept_connect(gint fd, const struct sockaddr* addr, socklen_t len) {
	return system_connect(fd, addr, len);
}