Practico 4 Ejercicio 6

Practico 4 Ejercicio 6

de Guillermo Daniel Toyos Marfurt -
Número de respuestas: 1

Buenas, tengo un par de dudas de el ejercicio 6 tras mirar la solución propuesta en el parcial julio 2020.

Para enviar la alerta a los administradores simplemente se hace:

sockAlerta = socket.udp()
 sockAlerta.sendto(data, 10.10.10.255, 8523) 
 sockAlerta.close()

Que es la dirección ip 10.10.10.255? Actúa esta cómo un broadcast a todos los hosts para los cuales su ip es de tipo 10.10.10.* ? 

Antes de "utilizar" un socket, no debe este bindearse? Por que no se hizo un master.bind("10.10.10.2",0)? 

Cuando es más apropiado bindear todas las interfaces en vez de una dirección ip/hostname? Por ejemplo, por que en la solucion al bindear el socket tcp del analizador se hace master.bind (*, 2562) en vez de master.bind("10.10.10.2",2562)?

Finalmente, tengo un par de dudas sobre el manejo de errores. Por ejemplo:

clientSock, err = serverSock.accept(); //espero conexiones
 if (err == 'timeout') 
 break;

¿Por qué se chequea si hay timeout si en ningun momento este se setea (sockets bloqueantes)?  También en otra parte se chequea si un socket.recieve() da err="closed", lo cual en la cartilla no figura como un posible valor de retorno en la cartilla.

Desde ya,gracias.

En respuesta a Guillermo Daniel Toyos Marfurt

Re: Practico 4 Ejercicio 6

de Martin Giachino -
>> Que es la dirección ip 10.10.10.255? Actúa esta cómo un broadcast a todos los hosts para los cuales su ip es de tipo 10.10.10.* ?

Si, esa era la idea. Es cierto que formalmente deberíamos haber definido el socket como broadcast antes (con la opción socket.SO_BROADCAST), pero eso es un detalle que en la corrección tampoco se toma en cuenta si al menos escriben una dirección que se parezca a un broadcast de esa red.

>> Antes de "utilizar" un socket, no debe este bindearse? Por que no se hizo un master.bind("10.10.10.2",0)?

cuando vas a usar un puerto para enviar cosas y donde no te interesa elegir un puerto local específico de tu máquina, no, no es necesario. Dejamos que el sistema operativo seleccione uno de forma aleatoria por nosotros.

>> Cuando es más apropiado bindear todas las interfaces en vez de una dirección ip/hostname? Por ejemplo, por que en la solucion al bindear el socket tcp del analizador se hace master.bind (*, 2562) en vez de master.bind("10.10.10.2",2562)?

Lo adecuado siempre es ajustarse lo mas posible a la realidad que intentes resolver. La diferencia es que al hacer bind a una interfaz, implica que solo en esa funcionará el server, y en las otras no. Esto en algún caso puede ser lo que quieres y en otros no.

>> ¿Por qué se chequea si hay timeout si en ningun momento este se setea (sockets bloqueantes)?

Está bien, podríamos haber hecho explícito el uso de settimeout() sobre el socket antes, pero creo que se entiende la idea.

>> También en otra parte se chequea si un socket.recieve() da err="closed", lo cual en la cartilla no figura como un posible valor de retorno en la cartilla.

Eso quizás pudo ser error de escritura nuestro, imagino que se intentó poner 'nil' en ese lugar.