Advertisement
Guest User

unix-socket-reader.c

a guest
May 15th, 2012
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.73 KB | None | 0 0
  1. #include <sys/socket.h>
  2. #include <sys/un.h>
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. #include <libgen.h>
  6. #include <string.h>
  7. #include <errno.h>
  8.  
  9. const struct sockaddr_un sockaddr={
  10.   AF_UNIX,
  11.   "/tmp/unix_socket"
  12. };
  13.  
  14. const char * basename_argv0;
  15.  
  16. int main(int argc, char * const argv[]) {
  17.   int sockfd,readfd;
  18.   int status;
  19.   basename_argv0=basename(argv[0]);
  20.   sockfd=socket(AF_UNIX,SOCK_STREAM,0);
  21.   if (sockfd==-1) {
  22.     fprintf(stderr,"%s: cannot open socket: %s\n",basename_argv0,strerror(errno));
  23.     return (2);
  24.   }
  25.   status=bind(sockfd,(const struct sockaddr *)&sockaddr,sizeof(sockaddr));
  26.   if (status!=0) {
  27.     fprintf(stderr,"%s: cannot bind to socket: %s\n",basename_argv0,strerror(errno));
  28.     return (2);
  29.   }
  30.   status=listen(sockfd,1);
  31.   if (status!=0) {
  32.     fprintf(stderr,"%s: cannot listen on socket: %s\n",basename_argv0,strerror(errno));
  33.     return (2);
  34.   }
  35.   readfd=accept(sockfd,NULL,NULL);
  36.   if (readfd==-1) {
  37.     fprintf(stderr,"%s: cannot accept incoming connection: %s\n",basename_argv0,strerror(errno));
  38.     return (2);
  39.   }
  40.   do {
  41.     char buffer[1];
  42.     ssize_t readsize;
  43.     readsize=read(readfd,buffer,sizeof(buffer));
  44.     if (readsize==0)
  45.       break;
  46.     else if (readsize==-1) {
  47.       fprintf(stderr,"%s: cannot read: %s\n",basename_argv0,strerror(errno));
  48.       return (2);
  49.     }
  50.     write(STDOUT_FILENO,buffer,readsize);
  51.     sleep(1);
  52.   } while (1);
  53.   status=close(sockfd);
  54.   if (status!=0) {
  55.     fprintf(stderr,"%s: cannot close sockfd: %s\n",basename_argv0,strerror(errno));
  56.     return (2);
  57.   }
  58.   status=unlink(sockaddr.sun_path);
  59.   if (status!=0) {
  60.     fprintf(stderr,"%s: %s: %s\n",basename_argv0,sockaddr.sun_path,strerror(errno));
  61.     return (2);
  62.   }
  63.   return (0);
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement