コード例 #1
0
ファイル: csjp_socket.cpp プロジェクト: csjpeter/libcsjp
bool Socket::send(const Str & data)
{
	if(file < 0)
		throw InvalidState("Socket is closed.");

	writeBuffer.append(data);

	return writeFromBuffer();
}
コード例 #2
0
ファイル: FSCloudService.cpp プロジェクト: PedroATavares/SO
static BOOL writeResponse(HANDLE sd, PFSCloudAnswer response) {
	return writeFromBuffer((SOCKET)sd, response, sizeof(FSCloudAnswer));
}
コード例 #3
0
int ServerSocket::processEventThread()
{
    epoll_event ev;
    ev.events = EPOLLIN | EPOLLOUT | EPOLLET | EPOLLRDHUP;
    epoll_event events[EPOLL_SIZE];
    sockaddr clientAddr;
    socklen_t addrlen = sizeof(sockaddr);
    while (true)
    {
        int eventCount = epoll_wait(epfd, events, EPOLL_SIZE, -1);
        if (eventCount == -1)
        {
            if (errno == EINTR)
            {
                continue;
            }
            Log::e("epoll wait error=%s", strerror(errno));
            return -1;
        }
        for (int i = 0; i < eventCount; ++i)
        {
            epoll_event& evt(events[i]);
            if (evt.events & EPOLLERR || evt.events & EPOLLHUP)
            {
                // handle errors
            }
            if (evt.events & EPOLLIN)
            {
                if (evt.data.fd == listenSocket)
                {
                    while (true)
                    {
                        Socket acceptedSocket = accept4(listenSocket, &clientAddr, &addrlen, SOCK_NONBLOCK);
                        if (acceptedSocket == -1)
                        {
                            if (errno != EAGAIN && errno != EWOULDBLOCK)
                            {
                                Log::e("accept error: %s", strerror(errno));
                            }
                            break;
                        }
                        if (numClients < config.maxConnection)
                        {
                            ev.data.ptr = addClient(acceptedSocket, (sockaddr_in&)clientAddr);
                            epoll_ctl(epfd, EPOLL_CTL_ADD, acceptedSocket, &ev);
                        }
                        else
                        {
                            close(acceptedSocket);
                        }
                    }
                }
                else
                {
                    ClientSocket* client = (ClientSocket*)evt.data.ptr;
                    readIntoBuffer(client);
                }
            }
            if (evt.events & EPOLLOUT)
            {
                ClientSocket* client = (ClientSocket*)evt.data.ptr;
                writeFromBuffer(client);
            }
            if (evt.events & EPOLLRDHUP)
            {
                ClientSocket* client = (ClientSocket*)evt.data.ptr;
                client->isClosing = true;
            }
        }
    }
    return 0;
}	//end of processEvent
コード例 #4
0
// main thread
void ServerSocket::flushClient(ClientSocket* client)
{
    writeFromBuffer(client);
}
コード例 #5
0
ファイル: FSCloudClient.cpp プロジェクト: PedroATavares/SO
// auxiliary function to send client request
BOOL WriteRequest(SOCKET sd, PFSCloudRequestHeader request)
{
	return writeFromBuffer(sd, request, sizeof(FSCloudRequestHeader));
}