[Examen Julio 2019][Problema 1]

[Examen Julio 2019][Problema 1]

de Gabriel Marcelo Acosta Soria -
Número de respuestas: 2
Buenas :
En este problema se plantea un proxy.
Este una vez establecida la coneccion debera pasar los paquetes hacia y desde la internet con respecto a el servidor que segun info server comunica debera ser el encargado de la direccion de correo.

para eso uds plantean generar dos hilos y llamar a la funcion de esta manera

thread.new (pushData, clientSock, proxyclientSock);
thread.new (pushData, proxyclientSock, clientSock);

que sera la encargadoa de "pasar" los paquetes desde un "sector" a otro (un hilo para cada sentido)

la funcion es la siguiente

void pushData(Socket src, Socket dst){
      String data;
      while (true){
          data, err = src.receive();
          if (data, err == nil, 'closed')
               break;
          remain, err = dst.send(data)
          if (err == 'closed')
               break;
       }
close (src);
close (dst);
}

a mi entender falta un repeat en la parte de mandar datos.. ya que el remanente puede no ser cero y en la proxima vuelta del while podria aparecer otro paquete en data o no..

segun entiendo seria:
void pushData(Socket src, Socket dst){
   String data;
   while (true){
       data, err = src.receive();
       if (data, err == nil, 'closed')
            break;
       repeat
               data, err2 = dst.send(data)
               if (err2 == 'closed')
                    break;
       until data=" " or err2 = closed
       ir error2 = closed
            break
      }
close (src);
close (dst);
}

desde ya gracias
En respuesta a Gabriel Marcelo Acosta Soria

Re: [Examen Julio 2019][Problema 1]

de Jorge Visca -
Efectivamente tienes razón. Con la versión actual de la API en este caso el send debe ser iterado o puede haber pérdida de información.
En respuesta a Jorge Visca

Re: [Examen Julio 2019][Problema 1]

de Jorge Visca -
Para aclarar, en una versión vieja de la api del curso los sends en un socket bloqueante esperaban hasta lograr enviar todo. Esto no era realista, por lo que se cambió al comportamiento actual que es como funcionan las APIs de socket reales.