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; }
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; }
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; }
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; }