Пример #1
0
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;
}