C/Visual C - Sockets desconexion y archivos

 
Vista:

Sockets desconexion y archivos

Publicado por Oskat (4 intervenciones) el 31/03/2004 09:06:10
Hola.
Se que hay pocos conocimientos especificos para windows, pero aun asi talves me podrian ayudar a encontrar una solucion.
Cuando ejecuto una aplicacion cliente servidor conectados o desconectados, funcionan perfectamente. PERO si desconecto el cable de red en medio de una transaccion, las aplicaciones tienen problemas al querer escribir en archivos al disco duro.
Me gustaria si pudieran hacerme sugerencias al respecto, sobre lo que podria estar generando este problema. Otro dato importante es que la maquina remota, no detecta la desconexion, la local si.
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Sockets desconexion y archivos

Publicado por chuidiang (677 intervenciones) el 31/03/2004 10:56:16
Te cuento algunos datos que sé, aunque no puedo darte muchos detalles.

Los sockets en general se hacen bastante fiables, por ello, cuando se pierde la conexion por cualquier motivo, intentan seguir transmitiendo los datos para garantizar que llegan. Si has quitado el cable, esto es imposible, pero los sockets siguen intentandolo.

En windows el kernel (nucleo del sistema operativo) no es multitarea. Cualquier llamada al kernel que tarde o se quede bloqueada, ralentiza o bloquea al resto del sistema. Si el socket esta esperando confirmacion del otro lado durante, digamos, 10 mili segundos, esos 10 mili segundos el kernel queda bloqueado. Si esta espera es repetitiva (que en el caso de los sockets lo es), el sistema ira mas lento y tendra problemas con todas las llamadas al kernel (escritura/lectura de ficheros en tu caso).

sigue ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sockets desconexion y archivos

Publicado por chuidiang (677 intervenciones) el 31/03/2004 10:56:45
En cuanto a detectar la desconexion, el socket servidor es capaz de detectarla con mas facilidad, mientras que el socket cliente no es tan capaz. No se el motivo, pero imagino que se debe a como están hechos los sockets. Es posible que cuando se hayan hecho los sockets se haya previsto que un cliente se pueda desconectar mas o menos abruptamente y al socket servidor se le haya protegido contra eso, mientras que no es normal que un servidor se cierre de manera brusca.

En el mundo unix existe la funcion setsockopt(). Creo que windows tambien las tienen. Dentro de las opciones que puedes poner en esta funcion hay una que es SO_KEEPALIVE. Esta opcion se encarga de alguna manera de revisar el socket periodicamente, de forma que si se desconecta, en cuanto intentes escribir o leer te saltará un error, en vez de quedarse colgado todo unos milisegundos.

Espero que algo de esto te sirva de ayuda.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sockets desconexion y archivos

Publicado por Fabián Sierra C. (50 intervenciones) el 31/03/2004 19:49:04
El enfoque para trabajar con sockets en Windows es distinto del de Unix. En Windows, el enfoque canónico es utilizar WSAAsyncSelect para asociar un socket con una ventana. Esta ventana recibirá eventos cada vez que pase algo en el socket. Con esto, es muy fácil detectar la desconexión manualmente (porque recibirás un mensaje específico) o establecer un timer asociado a la misma ventana (para cancelar por timeout. (sigue...)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sockets desconexion y archivos

Publicado por Fabián Sierra C. (50 intervenciones) el 31/03/2004 19:51:54
Para escribir en disco, abre y cierra el archivo cada vez que recibas el mensaje de "datos listos" y agrega los datos al final. Como en el mensaje se especifica el número de bytes recibidos, puedes escribir exactamente los bytes recibidos y no preocuparte por un tamaño de paquete.
¡Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sockets desconexion y archivos

Publicado por Oskat (4 intervenciones) el 24/04/2004 06:59:14
Hola,
Muchas gracias por sus respuestas, si ayudan a comprender mejor el funcionamiento de estos amigitos del TCP/IP.
Si he estado investigando mas y encontre lo del KEEPALIVE, solo que me da temor utilizarlo ya que siempre te advierten que esta opcion consume ancho de banda y puede saturar la red (claro cuando haya mucho trafico) Segun lo que lei del KEEPALIVE, constantemente se envian paquetes vacios entre el cliente y el servidor lo que ayuda a saber el estado de la conexion. Y en los ambientes UNIX son configurables estos intervalos. En Windows han fallado mis intentos de usar el setsockopt(), todavia no lo domestico, je je je.
La red de donde trabajo es un poco inestable a veces (siempre al azar) por un lapso de dos o tres minutos, la red se vuelve como intermitente una ves al dia, para mi ese tiempo es eterno ya que me genera mucha inestabilidad en las aplicaciones, pero ni modo asi nos toco vivir, je je je.
Ojala pronto cambiaran las plataformas de los servidores a Linux.

¡¡¡ Gracias por leer me, y si saben despues de algo mas, se los agradecere mucho !!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar