Advertisement
d1cor

socket_unix_emisor.c

Oct 6th, 2016
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.76 KB | None | 0 0
  1. /*******************************************
  2. * Author     : Diego Cordoba / @d1cor      *
  3. * Purpose    : Junco TIC                   *
  4. * Contact    : juncotic.com                *
  5. *******************************************/
  6.  
  7. #include<stdio.h>
  8. #include<stdlib.h>
  9. #include<sys/types.h>
  10. #include<sys/stat.h>
  11. #include<unistd.h>
  12. #include<string.h>
  13. #include<fcntl.h>
  14. #include<errno.h>
  15. #include<sys/socket.h>
  16. #include<sys/un.h>
  17.  
  18. #define MSG_SIZE 128
  19.  
  20. //emisor
  21.  
  22. void usage(char* progname){
  23.     printf("Usage:\n\t%s <pathname>\n\n",progname);
  24. }
  25.  
  26. int main(int argc, char** argv) {
  27.  
  28.     char *error;
  29.     int sockid;     //id del socket
  30.     struct sockaddr_un direccion;
  31.     char mensaje[MSG_SIZE];
  32.     int count;
  33.  
  34.     if(argc<2){
  35.         usage(*argv);
  36.         exit(1);
  37.     }
  38.  
  39.     if((sockid=socket(PF_UNIX,SOCK_DGRAM,0))<0){
  40.         error="socket";
  41.         goto err;
  42.     }
  43.  
  44.     //cargamos la direccion:
  45.     direccion.sun_family=AF_UNIX;
  46.     strcpy(direccion.sun_path,*(argv+1));
  47.  
  48.     //enviamos datos al socket:
  49.     while(count=read(STDIN_FILENO,mensaje,MSG_SIZE)){
  50.         *(mensaje+count)='\0';
  51.         if((sendto(sockid,mensaje,count+1,0,(struct sockaddr *)&direccion,sizeof(direccion)))<0){
  52.             error="sendto";
  53.             goto err;
  54.         }
  55.         printf("Enviado...\n");
  56.         if(!strcmp(mensaje,"exit\n")){
  57.             printf("Saliendo...\n");
  58.             break;
  59.         }
  60.     }
  61.  
  62.  
  63.     /*
  64.     ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
  65.         sockfd      socket id o file-descriptor del socket Unix
  66.         buf         buffer donde esta el mensaje
  67.         len         longitud del mensaje a enviar
  68.         flags       flags, 0 por default
  69.         dest_addr   direccion del destinatario
  70.         addrlen     long de la direccion
  71.     */
  72.  
  73.     close(sockid);
  74.     return 0;
  75.  
  76. err:
  77.     fprintf(stderr,"%s %d %s\n",error,errno,strerror(errno));
  78.     exit(1);
  79.  
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement