along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: protocol.c,v 1.28.4.77 2001/02/06 10:12:51 guus Exp $
+ $Id: protocol.c,v 1.28.4.79 2001/02/25 11:09:29 guus Exp $
*/
#include "config.h"
#include <unistd.h>
#include <stdio.h>
#include <stdarg.h>
+#include <errno.h>
#include <utils.h>
#include <xalloc.h>
int error_h(connection_t *cl)
{
- int errno;
+ int err;
char errorstring[MAX_STRING_SIZE];
cp
- if(sscanf(cl->buffer, "%*d %d "MAX_STRING, &errno, errorstring) != 2)
+ if(sscanf(cl->buffer, "%*d %d "MAX_STRING, &err, errorstring) != 2)
{
syslog(LOG_ERR, _("Got bad ERROR from %s (%s)"),
cl->name, cl->hostname);
if(debug_lvl >= DEBUG_ERROR)
{
syslog(LOG_NOTICE, _("Error message from %s (%s): %s: %s"),
- cl->name, cl->hostname, strerror(errno), errorstring);
+ cl->name, cl->hostname, strerror(err), errorstring);
}
terminate_connection(cl);
while(todo)
{
x = read(cl->meta_socket, p, todo);
- if(x<0)
+
+ if(x<=0)
{
- syslog(LOG_ERR, _("Error during reception of PACKET from %s (%s): %m"), cl->name, cl->hostname);
+ if(x==0)
+ syslog(LOG_NOTICE, _("Connection closed by %s (%s)"), cl->name, cl->hostname);
+ else
+ if(errno==EINTR)
+ continue;
+ else
+ syslog(LOG_ERR, _("Error during reception of PACKET from %s (%s): %m"), cl->name, cl->hostname);
+
return -1;
}