コード例 #1
0
ファイル: EPollClient.cpp プロジェクト: samblg/hurricane
    void EPollClient::Connect(const std::string& host, int32_t port) {
        struct sockaddr_in serv_addr;

        bzero((char*)&serv_addr, sizeof(serv_addr));
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = inet_addr(host.c_str());
        serv_addr.sin_port = htons(port);

        meshy::SetNonBlocking(GetNativeSocket());

        connect(GetNativeSocket(), (struct sockaddr*)&serv_addr, sizeof(serv_addr));
    }
コード例 #2
0
ファイル: EPollClient.cpp プロジェクト: samblg/hurricane
    int32_t EPollClient::Send(const meshy::ByteArray& byteArray) {
        LOG(LOG_DEBUG) << "EPollConnection::Send";

        struct epoll_event ev;
        NativeSocket clientSocket = GetNativeSocket();

        if ( EPollLoop::Get()->ModifyEpollEvents(_events | EPOLLOUT, clientSocket) ) {
            // TODO: MARK ERASE
            LOG(LOG_ERROR) << "FATAL epoll_ctl: mod failed!";
        }

        const char* buf = byteArray.data();
        int32_t size = byteArray.size();
        int32_t n = size;

        while (n > 0) {
            int32_t nwrite;
            nwrite = write(clientSocket, buf + size - n, n);
            if (nwrite < n) {
                if (nwrite == -1 && errno != EAGAIN) {
                    LOG(LOG_ERROR) << "FATAL write data to peer failed!";
                }
                break;
            }
            n -= nwrite;
        }

        return 0;
    }
コード例 #3
0
ファイル: EPollClient.cpp プロジェクト: samblg/hurricane
    int32_t EPollClient::Receive(char* buffer, int32_t bufferSize, int32_t& readSize) {
        readSize = 0;
        int32_t nread = 0;
        NativeSocketEvent ev;

        while ((nread = read(GetNativeSocket(), buffer + readSize, bufferSize - 1)) > 0) {
            readSize += nread;
        }

        return nread;
    }
コード例 #4
0
ファイル: EPollServer.cpp プロジェクト: wqx081/hurricane
    int32_t EPollServer::Listen(const std::string& host, int32_t port, int32_t backlog) {
        _Bind(host, port);

        int32_t listenfd = GetNativeSocket();

        int32_t errorCode = listen(listenfd, backlog);
        if (-1 == errorCode) {
            TRACE_ERROR("Listen socket failed!");
            assert(0);
            return errorCode;
        }

        errorCode = EPollLoop::Get()->AddEpollEvents(EPOLLIN, listenfd);

        if (errorCode == -1) {
            TRACE_ERROR("FATAL epoll_ctl: listen_sock!");
            assert(0);
            return errorCode;
        }

<<<<<<< HEAD
コード例 #5
0
 int32_t IOCPStream::Send(const ByteArray &byteArray)
 {
     return send(GetNativeSocket(), byteArray.data(), byteArray.size(), 0);
 }