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)); }
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; }
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; }
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
int32_t IOCPStream::Send(const ByteArray &byteArray) { return send(GetNativeSocket(), byteArray.data(), byteArray.size(), 0); }