Foros del Web » Programación para mayores de 30 ;) » Programación General »

Capturar cuando se teclea Ctrl+C y sockets

Estas en el tema de Capturar cuando se teclea Ctrl+C y sockets en el foro de Programación General en Foros del Web. Buenas, sigo con mi programilla de sockets, ahora ya lo tengo terminado, pero ahora le quiero añadir mas cosillas. Por ejemplo, cuando un cliente se ...
  #1 (permalink)  
Antiguo 21/03/2005, 05:13
 
Fecha de Ingreso: junio-2004
Mensajes: 283
Antigüedad: 20 años, 5 meses
Puntos: 0
Capturar cuando se teclea Ctrl+C y sockets

Buenas, sigo con mi programilla de sockets, ahora ya lo tengo terminado, pero ahora le quiero añadir mas cosillas. Por ejemplo, cuando un cliente se quiere desconectar del servidor envia QUIT y el servidor hace el close del socket. Pero me gustaria tambien que se cerrara el socket si el cliente hace Ctrl+C.

Como puedo capturar esas teclas?

Gracias

Otra cosa, para matar los procesos hijos de los clientes es suficiente con cerrar el socket? (haciendolo asi el cliente si termina), o tambien tengo que enviarle alguna señal al hijo a parte de cerrar el socket?
__________________
pOrtfOliO
  #2 (permalink)  
Antiguo 21/03/2005, 05:27
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Esta función se ejecuta cuando se hace ctrl+c:

Código:
void quitHandler(int sig) 
{
  printf("hicieron ctrl+c\r\n");
  exit(0);
}
Así registramos la función para que sea llamada:
Código:
signal(SIGINT, quitHandler);
En cuanto a cerrar el otro proceso, mejor enviale algún mensaje, sino no se va a enterar hasta que intente usar el socket y le de error.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 21/03/2005, 05:41
 
Fecha de Ingreso: junio-2004
Mensajes: 283
Antigüedad: 20 años, 5 meses
Puntos: 0
Gracias Eternal Idol, tan atento como siempre.
Me queda una duda, el código que me has dado sería para el cliente no? Yo lo que quiero es que el servidor este siempre a la espera hasta que sepa que el cliente ha cerrado con ctrl+c o haya tecleado QUIT , para asi poder actualizar el registro.

Gracias ;)
__________________
pOrtfOliO
  #4 (permalink)  
Antiguo 21/03/2005, 06:12
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Podes implementar el envio del QUIT en ese handler, ya que sabes cuando se hace el CTRL+C.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 21/03/2005, 06:56
 
Fecha de Ingreso: junio-2004
Mensajes: 283
Antigüedad: 20 años, 5 meses
Puntos: 0
perdona, puedes darme algun enlace con información sobre estas señales, es que no me entero muy bien como va, ya que el programa no me hace nada, y no se donde colocar el signal ni el void..

gracias de nuevo
__________________
pOrtfOliO
  #6 (permalink)  
Antiguo 21/03/2005, 06:58
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
signal(SIGINT, quitHandler); va en el main por ejemplo

Entonces cuando se produzca un CTRL+C tu función quitHandler es llamada, así de simple.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 21/03/2005, 07:58
 
Fecha de Ingreso: junio-2004
Mensajes: 283
Antigüedad: 20 años, 5 meses
Puntos: 0
ah ok, pero solo recibiria el crtl+c del servidor no? si lo hago en el cliente tambien lo recoge?

siento ser tan pesado :( pero muchas gracias :) tendre que poner tu nick en los creditos ;)
__________________
pOrtfOliO
  #8 (permalink)  
Antiguo 21/03/2005, 09:56
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Lo recibe el programa que tenga implementada la función quitHandler, entonces si está implementada en el cliente este hace un send("QUIT") al servidor y listo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 07/04/2005, 21:02
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 10 meses
Puntos: 4
hola, sera mucho pedir si me envias tu codigo? actualmente estoy necesitando algo parecido a lo qeu hiciste para un trabajo de la universidad, si puedes hacerme el favor de enviarme el server o el cliente te lo agradecere mucho mi email es [email protected] gracias
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:31.