int SocketDatagrama::recibe(PaqueteDatagrama & p) { unsigned int addr_len = sizeof(direccionForanea); bzero((char *)&direccionForanea, sizeof(direccionForanea)); int regreso = (int)recvfrom(s,p.obtieneDatos(),p.obtieneLongitud(), 0, (struct sockaddr *) &direccionForanea, &addr_len); p.inicializaPuerto(ntohs(direccionForanea.sin_port)); p.inicializaIp(inet_ntoa(direccionForanea.sin_addr)); //std::cout << "Mensaje recibido de: " << inet_ntoa(direccionForanea.sin_addr) << ":" << ntohs(direccionForanea.sin_port) << std::endl; return regreso; }
// Recibe un paquete tipo datagrama proveniente de este socket int SocketDatagrama::recibe(PaqueteDatagrama &p) { int retorno; socklen_t clilen; // Ojo no compila si es un tipo int en C clilen = sizeof(direccionForanea); retorno = recvfrom(s, (char *)p.obtieneDatos(), p.obtieneLongitud(), 0, (struct sockaddr *)&direccionForanea, &clilen); p.inicializaPuerto(ntohs(direccionForanea.sin_port)); p.inicializaIp(inet_ntoa(direccionForanea.sin_addr)); return retorno; }
int SocketDatagrama::recibe(PaqueteDatagrama &p, int size) { //char *datos = new char[p.obtieneLongitud()]; socklen_t clilen = sizeof(direccionForanea); int status = recvfrom(s, (char *)p.obtieneDatos(), p.obtieneLongitud(),0, (struct sockaddr *)&direccionForanea, &clilen); p.inicializaIp(inet_ntoa(direccionForanea.sin_addr)); p.inicializaPuerto(ntohs(direccionForanea.sin_port)); //cout << "Recibiendo de " << inet_ntoa(direccionForanea.sin_addr) << " en el puerto : " <<ntohs(direccionForanea.sin_port)<<endl; //cout << &res << endl; //printf("%d",res); return status; }
// Recibe un paquete tipo datagrama proveniente de este socket int SocketDatagrama::recibeTimeOut(PaqueteDatagrama &p) { int retorno; socklen_t clilen; // Ojo no compila si es un tipo int en C clilen = sizeof(direccionForanea); retorno = recvfrom(s, (char *)p.obtieneDatos(), p.obtieneLongitud(), 0, (struct sockaddr *)&direccionForanea, &clilen); p.inicializaPuerto(ntohs(direccionForanea.sin_port)); p.inicializaIp(inet_ntoa(direccionForanea.sin_addr)); if (retorno < 0) { if (errno == EWOULDBLOCK) fprintf(stderr, "Tiempo para recepciĆ³n transcurrido\n"); else fprintf(stderr, "Error en recvfrom\n"); } return retorno; }