예제 #1
0
파일: async.c 프로젝트: freb/rules
redisAsyncContext *redisAsyncConnect(const char *ip, int port) {
    SOCKADDR_STORAGE ss;
    redisContext *c = redisPreConnectNonBlock(ip, port, &ss);
    redisAsyncContext *ac = redisAsyncInitialize(c);
    if (aeWinSocketConnect(ac->c.fd, &ss) != 0) {
         ac->c.err = errno;
        strerror_r(errno, ac->c.errstr, sizeof(ac->c.errstr));
    }
    __redisAsyncCopyError(ac);
    return ac;
}
예제 #2
0
redisAsyncContext *redisAsyncConnect(const char *ip, int port) {
    struct sockaddr_in sa;
    redisContext *c = redisPreConnectNonBlock(ip, port, &sa);
    redisAsyncContext *ac = redisAsyncInitialize(c);
    if (aeWinSocketConnect(c->fd, (struct sockaddr *)&sa, sizeof(sa)) != 0) {
        c->err = errno;
        strerror_r(errno,c->errstr,sizeof(c->errstr));
    }
    __redisAsyncCopyError(ac);
    return ac;
}
예제 #3
0
static int anetTcpGenericConnect(char *err, char *addr, int port, int flags) {
    int s;
    struct sockaddr_in sa;
    unsigned long inAddress;

    if ((s = anetCreateSocket(err,AF_INET)) == ANET_ERR)
        return ANET_ERR;

    sa.sin_family = AF_INET;
    sa.sin_port = htons((u_short)port);
    inAddress = inet_addr(addr);
    if (inAddress == INADDR_NONE || inAddress == INADDR_ANY) {
        struct hostent *he;

        he = gethostbyname(addr);
        if (he == NULL) {
            anetSetError(err, "can't resolve: %s\n", addr);
            closesocket(s);
            return ANET_ERR;
        }
        memcpy(&sa.sin_addr, he->h_addr, sizeof(struct in_addr));
    }
    else {
      sa.sin_addr.s_addr = inAddress;
    }

    if (aeWinSocketConnect(s, (struct sockaddr*)&sa, sizeof(sa)) == SOCKET_ERROR) {
        if ((errno == WSAEWOULDBLOCK || errno == WSA_IO_PENDING)) errno = EINPROGRESS;
        if (errno == EINPROGRESS && flags & ANET_CONNECT_NONBLOCK) {
            return s;
        }

        anetSetError(err, "connect: %d\n", errno);
        closesocket(s);
        return ANET_ERR;
    }

    return s;
}
예제 #4
0
파일: anet.c 프로젝트: lalalaring/BlackCat
static int anetTcpGenericConnect(char *err, char *addr, int port, int flags) {
    int rfd;
    SOCKADDR_STORAGE ss;

    ParseStorageAddress(addr, port, &ss);

    if ((rfd = anetCreateSocket(err,ss.ss_family)) == ANET_ERR) {
        return ANET_ERR;
    }
    if (aeWinSocketConnect(rfd, &ss ) == SOCKET_ERROR) {
        if ((errno == WSAEWOULDBLOCK || errno == WSA_IO_PENDING)) errno = EINPROGRESS;
        if (errno == EINPROGRESS && flags & ANET_CONNECT_NONBLOCK) {
            return rfd;
        }

        anetSetError(err, "connect: %d\n", errno);
        close(rfd);
        return ANET_ERR;
    }

    return rfd;
}