ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtd.C
Revision: 1.1
Committed: Mon Nov 24 17:28:08 2003 UTC (20 years, 6 months ago) by pcg
Content type: text/plain
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 #include "rxvtlib.h"
2     #include "rxvtdaemon.h"
3     #include "iom.h"
4    
5     #include <cstdio>
6     #include <cstdlib>
7    
8     #include <unistd.h>
9     #include <sys/socket.h>
10     #include <sys/un.h>
11    
12     struct server : rxvt_connection {
13     void read_cb (io_watcher &w, short revents); io_watcher read_ev;
14    
15     server (int fd)
16     : read_ev (this, &server::read_cb)
17     {
18     this->fd = fd;
19     read_ev.start (fd, EVENT_READ);
20     }
21    
22     void err ();
23     };
24    
25     struct listener {
26     int fd;
27    
28     void accept_cb (io_watcher &w, short revents); io_watcher accept_ev;
29    
30     listener ();
31     };
32    
33     listener::listener ()
34     : accept_ev (this, &listener::accept_cb)
35     {
36     if ((fd = socket (PF_LOCAL, SOCK_STREAM, 0)) < 0)
37     {
38     perror ("unable to create listening socket");
39     exit (EXIT_FAILURE);
40     }
41    
42     sockaddr_un sa;
43    
44     sa.sun_family = AF_UNIX;
45     strcpy (sa.sun_path, rxvt_connection::unix_sockname ());
46    
47     unlink (rxvt_connection::unix_sockname ());
48    
49     if (bind (fd, (sockaddr *)&sa, sizeof (sa)))
50     {
51     perror ("unable to bind listening socket");
52     exit (EXIT_FAILURE);
53     }
54    
55     if (listen (fd, 5))
56     {
57     perror ("unable to listen on socket");
58     exit (EXIT_FAILURE);
59     }
60    
61     accept_ev.start (fd, EVENT_READ);
62     }
63    
64     void listener::accept_cb (io_watcher &w, short revents)
65     {
66     int fd2 = accept (fd, 0, 0);
67    
68     if (fd2 >= 0)
69     new server (fd2);
70     }
71    
72     void server::err ()
73     {
74     close (fd);
75     delete this;
76     }
77    
78     void server::read_cb (io_watcher &w, short revents)
79     {
80     token cmd;
81    
82     if (recv (cmd))
83     {
84     if (!strcmp (cmd, "NEW"))
85     {
86     }
87     else
88     err ();
89     }
90     else
91     err ();
92     }
93    
94     int
95     main(int argc, const char *const *argv)
96     {
97     listener l;
98     iom.loop ();
99    
100     #if 0
101     if (rxvt_init(argc, argv) == NULL)
102     return EXIT_FAILURE;
103    
104     dR;
105     rxvt_main_loop(aR); /* main processing loop */
106     #endif
107     return EXIT_SUCCESS;
108     }