int Network::connectSocket(std::string host, std::string port) { struct protoent *pe; ClientInfo *stranger = new ClientInfo(_len); if (!stranger) return (0); if (!(pe = getprotobyname("TCP"))) return (0); stranger->setAddr(_family, port.c_str(), host.c_str()); //prépare la connexion tcp vers un serveur if ((stranger->get_socket() = socket(_family, SOCK_STREAM, pe->p_proto)) == -1) return (0); if (connect(stranger->get_socket(), (saddr *)(&stranger->get_info()), sizeof(saddrin)) < 0) { close(stranger->get_socket()); delete stranger; return (0); } new_connected(++_id, stranger); _change = true; return (_id); }
int Network::acceptSocket(void) { socklen_t socklen; ClientInfo *stranger = new ClientInfo(_len); if (!stranger) return (0); socklen = sizeof(saddrin); if ((stranger->get_socket() = accept(get_connected(0)->get_socket(), (saddr *)&(stranger->get_info()), &socklen)) < 0) { delete stranger; return (0); } new_connected(++_id, stranger); _change = true; return (_id); }
bool Network::createSocket(std::string proto, int &type) { struct protoent *pe; ClientInfo *current; if (_connected.find(0) != _connected.end()) return (false); if (!(current = (new ClientInfo(_len)))) return (false); if (!(pe = getprotobyname(proto.c_str()))) return (false); if ((current->get_socket() = socket(_family, type, pe->p_proto)) == -1) { delete current; return (false); } _connected[++_id] = current; //stockage de la socket return (true); }