• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

NameException

MSG_OOB

1 mensagem neste tópico

Boas...

Mais uma duvida...

Quero enviar uma mensagem urgente de um cliente (MSG_OOB) para um servidor, para que este interrompa um processo, mas não tou-me a enteder com isto...

No cliente tenho assim:

#include <...>

// ************************************

int interromper = 0;
struct hostent *he;
int sockfd;
int serverPort;
struct sockaddr_in enderecoRemoto;

void interrupcao() {
  char *buf = "MSG_OOB";
  int sen = send(sockfd, buf, 28, MSG_OOB);
  interromper = 1;
  printf("Processo Interrompido...\n");
}

int main(int argc, char *argv[]) {

  interromper= 0;
  struct sigaction sa;
  sa.sa_sigaction = interrupcao;
  if (sigaction(SIGINT, &sa, NULL) == -1)
     perror("sigaction");

(...)

}

A minha duvida está, em  como receber este sinal no servidor. Suponho que seja com a system call recv(), que tenho assim:

//Server
#include <...>

void sigurg_child();

int main(int argc, char *argv[], char *envp[]) {   		  
  					    
  interromper= 0;
  struct sigaction sa;
  sa.sa_sigaction = sigurg_child;
  if (sigaction(SIGURG, &sa, NULL) == -1)
     perror("sigaction");


(...)

if(retval==-1){
      perror("select");
}
    
//Socket
else if(FD_ISSET(cfd, &readfds)){
       signal(SIGURG, sigurg_child);
(...)

}

(...)

}

void sigurg_child(){
  char *buf;
  int rec = recv(cfd, &buf, 28,  MSG_OOB);
  if(rec==-1){  
  	perror("recv "); 
  	exit(1);
  }
  if((kill(pidComando, SIGINT))==0){
  	printf("Processo comando interrompido...\n");
  } 
}
//Fim servidor

Alguem me poderá dar uma ajuda? Onde estou a errar? Que terei de alterar?

Obrigado...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora