Mercurial > emacs
comparison lib-src/emacsserver.c @ 8811:7cd89ebbe641
(FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
32-bit versions of these macros.
(main) [HAVE_SOCKETS & !HAVE_SYSVIPC]: Use these macros.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Sat, 17 Sep 1994 00:02:50 +0000 |
parents | ffbf38ae06d1 |
children | 5d8165cdb0d8 |
comparison
equal
deleted
inserted
replaced
8810:6ca3e0d3b7ca | 8811:7cd89ebbe641 |
---|---|
55 #include <sys/un.h> | 55 #include <sys/un.h> |
56 #include <stdio.h> | 56 #include <stdio.h> |
57 #include <errno.h> | 57 #include <errno.h> |
58 | 58 |
59 extern int errno; | 59 extern int errno; |
60 | |
61 /* Copied from src/process.c */ | |
62 #ifdef FD_SET | |
63 /* We could get this from param.h, but better not to depend on finding that. | |
64 And better not to risk that it might define other symbols used in this | |
65 file. */ | |
66 #ifdef FD_SETSIZE | |
67 #define MAXDESC FD_SETSIZE | |
68 #else | |
69 #define MAXDESC 64 | |
70 #endif | |
71 #define SELECT_TYPE fd_set | |
72 #else /* no FD_SET */ | |
73 #define MAXDESC 32 | |
74 #define SELECT_TYPE int | |
75 | |
76 /* Define the macros to access a single-int bitmap of descriptors. */ | |
77 #define FD_SET(n, p) (*(p) |= (1 << (n))) | |
78 #define FD_CLR(n, p) (*(p) &= ~(1 << (n))) | |
79 #define FD_ISSET(n, p) (*(p) & (1 << (n))) | |
80 #define FD_ZERO(p) (*(p) = 0) | |
81 #endif /* no FD_SET */ | |
60 | 82 |
61 main () | 83 main () |
62 { | 84 { |
63 char system_name[32]; | 85 char system_name[32]; |
64 int s, infd, fromlen; | 86 int s, infd, fromlen; |
127 | 149 |
128 /* Disable sigpipes in case luser kills client... */ | 150 /* Disable sigpipes in case luser kills client... */ |
129 signal (SIGPIPE, SIG_IGN); | 151 signal (SIGPIPE, SIG_IGN); |
130 for (;;) | 152 for (;;) |
131 { | 153 { |
132 int rmask = (1 << s) + 1; | 154 SELECT_TYPE rmask; |
133 if (select (s + 1, (fd_set *)&rmask, 0, 0, 0) < 0) | 155 FD_ZERO (rmask); |
156 FD_SET (rmask, 0); | |
157 FD_SET (rmask, s); | |
158 if (select (s + 1, &rmask, 0, 0, 0) < 0) | |
134 perror ("select"); | 159 perror ("select"); |
135 if (rmask & (1 << s)) /* client sends list of filenames */ | 160 if (FD_ISSET (rmask, s)) /* client sends list of filenames */ |
136 { | 161 { |
137 fromlen = sizeof (fromunix); | 162 fromlen = sizeof (fromunix); |
138 fromunix.sun_family = AF_UNIX; | 163 fromunix.sun_family = AF_UNIX; |
139 infd = accept (s, (struct sockaddr *) &fromunix, | 164 infd = accept (s, (struct sockaddr *) &fromunix, &fromlen); |
140 (size_t *) &fromlen); | |
141 if (infd < 0) | 165 if (infd < 0) |
142 { | 166 { |
143 if (errno == EMFILE || errno == ENFILE) | 167 if (errno == EMFILE || errno == ENFILE) |
144 printf ("Too many clients.\n"); | 168 printf ("Too many clients.\n"); |
145 else | 169 else |
184 } | 208 } |
185 fflush (stdout); | 209 fflush (stdout); |
186 fflush (infile); | 210 fflush (infile); |
187 continue; | 211 continue; |
188 } | 212 } |
189 else if (rmask & 1) /* emacs sends codeword, fd, and string message */ | 213 else if (FD_ISSET (rmask, 0)) /* emacs sends codeword, fd, and string message */ |
190 { | 214 { |
191 /* Read command codeword and fd */ | 215 /* Read command codeword and fd */ |
192 clearerr (stdin); | 216 clearerr (stdin); |
193 scanf ("%s %d%*c", code, &infd); | 217 scanf ("%s %d%*c", code, &infd); |
194 if (ferror (stdin) || feof (stdin)) | 218 if (ferror (stdin) || feof (stdin)) |