Added s->err_hook wrapper that empties socket.
This commit is contained in:
parent
030d3b387e
commit
7c49f71559
1 changed files with 14 additions and 7 deletions
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue