/* TCP_echod.c
*
- * Copyright (C) 2001-2003 Simone Piccardi
+ * Copyright (C) 2001-2004 Simone Piccardi
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* Usage: echod -h give all info
*
- * $Id: TCP_echod.c,v 1.12 2003/08/03 18:12:47 piccardi Exp $
+ * $Id$
*
****************************************************************/
/*
#include <signal.h> /* signal functions */
#include <errno.h> /* error code */
#include <string.h> /* error strings */
+#include <stdlib.h>
+
#include "Gapil.h"
#define BACKLOG 10
int waiting = 0;
int compat = 0;
pid_t pid;
- struct sockaddr_in serv_add, cli_add;
+ struct sockaddr_in cli_add;
socklen_t len;
char debug[MAXLINE], ipaddr[20];
/*
} else {
SignalRestart(SIGCHLD, HandSigCHLD); /* restarting handler */
}
- /* create socket */
- if ( (list_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
- perror("Socket creation error");
- exit(1);
- }
- /* initialize address */
- memset((void *)&serv_add, 0, sizeof(serv_add)); /* clear server address */
- serv_add.sin_family = AF_INET; /* address type is INET */
- serv_add.sin_port = htons(7); /* echo port is 7 */
- serv_add.sin_addr.s_addr = htonl(INADDR_ANY); /* connect from anywhere */
- /* bind socket */
- if (bind(list_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
- perror("bind error");
- exit(1);
- }
+ /* create and bind socket */
+ if ( (list_fd = sockbind(argv[optind], "echo", 6, SOCK_STREAM)) < 0) {
+ return 1;
+ }
/* release privileges and go daemon */
if (setgid(65534) !=0) { /* first give away group privileges */
perror("cannot give away group privileges");
/* handle echo to client */
while (1) {
/* accept connection */
+ len = sizeof(cli_add);
while (((conn_fd = accept(list_fd, (struct sockaddr *)&cli_add, &len))
< 0) && (errno == EINTR));
- if ( conn_fd < 0) {
+ if (conn_fd < 0) {
PrintErr("accept error");
exit(1);
}