size_t asciistream::read(void * buf, size_t len) { size_t available = _wPos - _rPos; size_t toRead(std::min(len, available)); memcpy(buf, _buffer+_rPos, toRead); _rPos += toRead; return toRead; }
Socket::Socket(std::string const &serv, int port) { struct protoent *pe; struct sockaddr_in sockaddr; socklen_t socksize; int sock; int okay; pe = getprotobyname("TCP"); socksize = sizeof(struct sockaddr); if ((sock = socket(AF_INET, SOCK_STREAM, pe->p_proto)) == -1) { std::cerr << "Socket creation failed." << std::endl; exit(2); } sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(port); sockaddr.sin_addr.s_addr = inet_addr(serv.c_str()); if ((connect(sock, reinterpret_cast<const struct sockaddr *>(&sockaddr), socksize)) != 0) { std::cerr << "Socket connection failed." << std::endl; exit(3); } m_sock = sock; m_fds.fd = m_sock; m_fds.events = POLLIN; okay = 0; if (toRead()) { okay = 1; if (receiveMessage() != "BIENVENUE") okay = 0; } if (okay) { m_okay = true; sendMessage("GRAPHIC"); } else { m_okay = false; std::cerr << "\'BIENVENUE\' not received..." << std::endl << "Exiting ..." << std::endl; } }