Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/socket.h>
- #include <sys/un.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <libgen.h>
- #include <string.h>
- #include <errno.h>
- const struct sockaddr_un sockaddr={
- AF_UNIX,
- "/tmp/unix_socket"
- };
- const char * basename_argv0;
- int main(int argc, char * const argv[]) {
- int sockfd,readfd;
- int status;
- basename_argv0=basename(argv[0]);
- sockfd=socket(AF_UNIX,SOCK_STREAM,0);
- if (sockfd==-1) {
- fprintf(stderr,"%s: cannot open socket: %s\n",basename_argv0,strerror(errno));
- return (2);
- }
- status=bind(sockfd,(const struct sockaddr *)&sockaddr,sizeof(sockaddr));
- if (status!=0) {
- fprintf(stderr,"%s: cannot bind to socket: %s\n",basename_argv0,strerror(errno));
- return (2);
- }
- status=listen(sockfd,1);
- if (status!=0) {
- fprintf(stderr,"%s: cannot listen on socket: %s\n",basename_argv0,strerror(errno));
- return (2);
- }
- readfd=accept(sockfd,NULL,NULL);
- if (readfd==-1) {
- fprintf(stderr,"%s: cannot accept incoming connection: %s\n",basename_argv0,strerror(errno));
- return (2);
- }
- do {
- char buffer[1];
- ssize_t readsize;
- readsize=read(readfd,buffer,sizeof(buffer));
- if (readsize==0)
- break;
- else if (readsize==-1) {
- fprintf(stderr,"%s: cannot read: %s\n",basename_argv0,strerror(errno));
- return (2);
- }
- write(STDOUT_FILENO,buffer,readsize);
- sleep(1);
- } while (1);
- status=close(sockfd);
- if (status!=0) {
- fprintf(stderr,"%s: cannot close sockfd: %s\n",basename_argv0,strerror(errno));
- return (2);
- }
- status=unlink(sockaddr.sun_path);
- if (status!=0) {
- fprintf(stderr,"%s: %s: %s\n",basename_argv0,sockaddr.sun_path,strerror(errno));
- return (2);
- }
- return (0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement