EV-Redis

 view release on metacpan or  search on metacpan

deps/hiredis/sockcompat.c  view on Meta::CPAN

            ret = getsockopt(sockfd, level, optname, (char *)&timeout, &dwlen);
            tv->tv_sec = timeout / 1000;
            tv->tv_usec = (timeout * 1000) % 1000000;
        } else {
            ret = WSAEFAULT;
        }
        *optlen = sizeof (struct timeval);
    } else {
        ret = getsockopt(sockfd, level, optname, (char*)optval, optlen);
    }
    if (ret != SOCKET_ERROR && level == SOL_SOCKET && optname == SO_ERROR) {
        /* translate SO_ERROR codes, if non-zero */
        int err = *(int*)optval;
        if (err != 0) {
            err = _wsaErrorToErrno(err);
            *(int*)optval = err;
        }
    }
    _updateErrno(ret != SOCKET_ERROR);
    return ret != SOCKET_ERROR ? ret : -1;
}

int win32_setsockopt(SOCKET sockfd, int level, int optname, const void *optval, socklen_t optlen) {
    int ret = 0;
    if ((level == SOL_SOCKET) && ((optname == SO_RCVTIMEO) || (optname == SO_SNDTIMEO))) {
        const struct timeval *tv = optval;
        DWORD timeout = tv->tv_sec * 1000 + tv->tv_usec / 1000;
        ret = setsockopt(sockfd, level, optname, (const char*)&timeout, sizeof(DWORD));
    } else {
        ret = setsockopt(sockfd, level, optname, (const char*)optval, optlen);
    }
    _updateErrno(ret != SOCKET_ERROR);
    return ret != SOCKET_ERROR ? ret : -1;
}

int win32_close(SOCKET fd) {
    int ret = closesocket(fd);
    _updateErrno(ret != SOCKET_ERROR);
    return ret != SOCKET_ERROR ? ret : -1;
}

ssize_t win32_recv(SOCKET sockfd, void *buf, size_t len, int flags) {
    int ret = recv(sockfd, (char*)buf, (int)len, flags);
    _updateErrno(ret != SOCKET_ERROR);
    return ret != SOCKET_ERROR ? ret : -1;
}

ssize_t win32_send(SOCKET sockfd, const void *buf, size_t len, int flags) {
    int ret = send(sockfd, (const char*)buf, (int)len, flags);
    _updateErrno(ret != SOCKET_ERROR);
    return ret != SOCKET_ERROR ? ret : -1;
}

int win32_poll(struct pollfd *fds, nfds_t nfds, int timeout) {
    int ret = WSAPoll(fds, nfds, timeout);
    _updateErrno(ret != SOCKET_ERROR);
    return ret != SOCKET_ERROR ? ret : -1;
}

int win32_redisKeepAlive(SOCKET sockfd, int interval_ms) {
    struct tcp_keepalive cfg;
    DWORD bytes_in;
    int res;

    cfg.onoff = 1;
    cfg.keepaliveinterval = interval_ms;
    cfg.keepalivetime = interval_ms;

    res = WSAIoctl(sockfd, SIO_KEEPALIVE_VALS, &cfg,
                   sizeof(struct tcp_keepalive), NULL, 0,
                   &bytes_in, NULL, NULL);

    return res == 0 ? 0 : _wsaErrorToErrno(res);
}

#endif /* _WIN32 */



( run in 1.550 second using v1.01-cache-2.11-cpan-5735350b133 )