/*
- * $Id: recv-announce.cc,v 1.25 2003/01/23 00:37:25 robertc Exp $
+ * $Id$
*
* DEBUG: section 0 Announcement Server
* AUTHOR: Harvest Derived
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
/*
* This program must be run from inetd. First add something like this
* to /etc/services:
- *
+ *
* cached_announce 3131/udp # cache announcements
- *
+ *
* And then add something like this to /etc/inetd/conf:
- *
+ *
* cached_announce dgram udp wait cached /tmp/recv-announce recv-announce /tmp/recv-announce.log
- *
- *
+ *
+ *
* A single instance of this process will continue to handle incoming
* requests. If it dies, or is killed, inetd should restart it when the
* next message arrives.
- *
+ *
*/
-/*
+/*
* usage: recv-announce logfile
*/
main(int argc, char *argv[])
{
char buf[RECV_BUF_SIZE];
+
struct sockaddr_in R;
socklen_t len;
+
struct hostent *hp = NULL;
char logfile[BUFSIZ];
char ip[4];
for (len = 0; len < 32; len++) {
- signal(len, sig_handle);
+ signal(len, sig_handle);
}
if (argc > 1)
- strcpy(logfile, argv[1]);
+ strcpy(logfile, argv[1]);
else
- strcpy(logfile, "/tmp/recv-announce.log");
+ strcpy(logfile, "/tmp/recv-announce.log");
close(1);
+
if (open(logfile, O_WRONLY | O_CREAT | O_APPEND, 0660) < 0) {
- perror(logfile);
- exit(1);
+ perror(logfile);
+ exit(1);
}
+
close(2);
dup(1);
for (;;) {
- memset(buf, '\0', RECV_BUF_SIZE);
- memset(&R, '\0', len = sizeof(R));
-
- if (recvfrom(0, buf, RECV_BUF_SIZE, 0, (sockaddr *)&R, &len) < 0) {
- perror("recv");
- exit(2);
- }
- xmemcpy(ip, &R.sin_addr.s_addr, 4);
- hp = gethostbyaddr(ip, 4, AF_INET);
- printf("==============================================================================\n");
- printf("Received from %s [%s]\n",
- inet_ntoa(R.sin_addr),
- (hp && hp->h_name) ? hp->h_name : "Unknown");
- fputs(buf, stdout);
- fflush(stdout);
+ memset(buf, '\0', RECV_BUF_SIZE);
+ memset(&R, '\0', len = sizeof(R));
+
+ if (recvfrom(0, buf, RECV_BUF_SIZE, 0, (sockaddr *)&R, &len) < 0) {
+ perror("recv");
+ exit(2);
+ }
+
+ xmemcpy(ip, &R.sin_addr.s_addr, 4);
+ hp = gethostbyaddr(ip, 4, AF_INET);
+ printf("==============================================================================\n");
+ printf("Received from %s [%s]\n",
+ inet_ntoa(R.sin_addr),
+ (hp && hp->h_name) ? hp->h_name : "Unknown");
+ fputs(buf, stdout);
+ fflush(stdout);
}
+
return 0;
}