Exemplo UNIX: servidor

Este servidor oferece sua interface através de um socket AF_LOCAL chamado “./socket”.

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;
}
  • pua/servidor_unix.txt
  • Última modificação: 2014/03/27 09:29
  • por maziero