コード例 #1
0
ファイル: SocketEndpoint.cpp プロジェクト: hailynch/pothos
    bool isRecvReady(const Poco::Timespan &timeout)
    {
        struct timeval tv;
        tv.tv_sec = timeout.seconds();
        tv.tv_usec = timeout.microseconds();

        if (not connected)
        {
            UDT::UDSET readfds;
            UD_SET(serverSock, &readfds);
            if (UDT::select(1, &readfds, nullptr, nullptr, &tv) != 1) return false;

            sockaddr addr;
            int addrlen = sizeof(addr);
            this->clientSock = UDT::accept(this->serverSock, &addr, &addrlen);
            if (addrlen == 0)
            {
                throw Pothos::RuntimeException("UDT::accept()", UDT::getlasterror().getErrorMessage());
            }
            this->connected = true;
            return false;
        }

        UDT::UDSET readfds;
        UD_SET(clientSock, &readfds);
        return UDT::select(1, &readfds, nullptr, nullptr, &tv) == 1;
    }