Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

pua:servidor_unix [2008/08/13 21:33] – created mazieropua:servidor_unix [2014/03/27 09:29] (atual) maziero
Linha 1: Linha 1:
 +====== Exemplo UNIX: servidor ======
 +
 +Este servidor oferece sua interface através de um socket ''AF_LOCAL'' chamado "''./socket''".
 +
 +<code c unix-server.c>
 +#include <stdio.h>
 +#include <errno.h>
 +#include <sys/socket.h>
 +#include <sys/un.h>
 +
 +int main (int argc, char *argv[])
 +{
 +   int serversock;
 +   struct sockaddr_un self;
 +  
 +   /* cria o socket */
 +   serversock = socket (AF_LOCAL, SOCK_STREAM, 0) ;
 +   if ( serversock < 0 )
 +   {
 +      perror("Erro no socket");
 +      exit(1);
 +   }
 +  
 +   /* monta o endereço */
 +   bzero(&self, sizeof(self));
 +   self.sun_family = AF_LOCAL;
 +   strcpy (self.sun_path, "./socket");
 +  
 +   /* associa o endereço ao socket */
 +   if ( bind (serversock, (struct sockaddr*)&self, sizeof(self)) )
 +   {
 +      perror("Erro no bind");
 +      exit(1);
 +   }
 +  
 +   /* coloca o socket em escuta */
 +   if ( listen (serversock, 20) )
 +   {
 +      perror("Erro no listen");
 +      exit(1);
 +   }
 +  
 +   while (1)
 +   {
 +      int clientsock;   
 +      struct sockaddr_un client_addr;
 +      int addrlen = sizeof(client_addr);
 +      char * resposta ;
 +     
 +      /* aguarda e aceita uma conexão externa */
 +      clientsock = accept (serversock, (struct sockaddr*)&client_addr, &addrlen);
 +     
 +      printf("Client connected\n") ;
 +     
 +      /* envia uma resposta HTTP padrão */
 +      resposta = "Welcome, client !\n" ;
 +     
 +      write (clientsock, resposta, strlen (resposta)+1);
 +     
 +      /* fecha o socket da conexão recebida */
 +      close (clientsock);
 +   }
 +  
 +   /* encerra o socket servidor */
 +   close (serversock);
 +   unlink ("./socket") ; // o servidor deve remover o arquivo
 +  
 +   return 0;
 +}
 +</code>