Added s->err_hook wrapper that empties socket.

This commit is contained in:
Ondrej Filip 2005-02-14 21:28:51 +00:00
parent 030d3b387e
commit 7c49f71559

View file

@ -75,6 +75,13 @@ tracked_fopen(pool *p, char *name, char *mode)
return f; return f;
} }
void
c_err_hook(struct birdsock *s, int err)
{
s->ttx = s->tpos; /* empty tx buffer */
s->err_hook(s, err);
}
/** /**
* DOC: Timers * DOC: Timers
* *
@ -680,7 +687,7 @@ sk_passive_connected(sock *s, struct sockaddr *sa, int al, int type)
else if (errno != EINTR && errno != EAGAIN) else if (errno != EINTR && errno != EAGAIN)
{ {
log(L_ERR "accept: %m"); log(L_ERR "accept: %m");
s->err_hook(s, errno); c_err_hook(s, errno);
} }
return 0; return 0;
} }
@ -898,7 +905,7 @@ sk_maybe_write(sock *s)
{ {
if (errno != EINTR && errno != EAGAIN) if (errno != EINTR && errno != EAGAIN)
{ {
s->err_hook(s, errno); c_err_hook(s, errno);
return -1; return -1;
} }
return 0; return 0;
@ -923,7 +930,7 @@ sk_maybe_write(sock *s)
{ {
if (errno != EINTR && errno != EAGAIN) if (errno != EINTR && errno != EAGAIN)
{ {
s->err_hook(s, errno); c_err_hook(s, errno);
return -1; return -1;
} }
return 0; return 0;
@ -1001,10 +1008,10 @@ sk_read(sock *s)
if (c < 0) if (c < 0)
{ {
if (errno != EINTR && errno != EAGAIN) if (errno != EINTR && errno != EAGAIN)
s->err_hook(s, errno); c_err_hook(s, errno);
} }
else if (!c) else if (!c)
s->err_hook(s, 0); c_err_hook(s, 0);
else else
{ {
s->rpos += c; s->rpos += c;
@ -1029,7 +1036,7 @@ sk_read(sock *s)
if (e < 0) if (e < 0)
{ {
if (errno != EINTR && errno != EAGAIN) if (errno != EINTR && errno != EAGAIN)
s->err_hook(s, errno); c_err_hook(s, errno);
return 0; return 0;
} }
s->rpos = s->rbuf + e; s->rpos = s->rbuf + e;
@ -1052,7 +1059,7 @@ sk_write(sock *s)
if (connect(s->fd, (struct sockaddr *) &sa, sizeof(sa)) >= 0 || errno == EISCONN) if (connect(s->fd, (struct sockaddr *) &sa, sizeof(sa)) >= 0 || errno == EISCONN)
sk_tcp_connected(s); sk_tcp_connected(s);
else if (errno != EINTR && errno != EAGAIN && errno != EINPROGRESS) else if (errno != EINTR && errno != EAGAIN && errno != EINPROGRESS)
s->err_hook(s, errno); c_err_hook(s, errno);
return 0; return 0;
} }
default: default: