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
*
else if (errno != EINTR && errno != EAGAIN)
{
log(L_ERR "accept: %m");
- s->err_hook(s, errno);
+ c_err_hook(s, errno);
}
return 0;
}
{
if (errno != EINTR && errno != EAGAIN)
{
- s->err_hook(s, errno);
+ c_err_hook(s, errno);
return -1;
}
return 0;
{
if (errno != EINTR && errno != EAGAIN)
{
- s->err_hook(s, errno);
+ c_err_hook(s, errno);
return -1;
}
return 0;
if (c < 0)
{
if (errno != EINTR && errno != EAGAIN)
- s->err_hook(s, errno);
+ c_err_hook(s, errno);
}
else if (!c)
- s->err_hook(s, 0);
+ c_err_hook(s, 0);
else
{
s->rpos += c;
if (e < 0)
{
if (errno != EINTR && errno != EAGAIN)
- s->err_hook(s, errno);
+ c_err_hook(s, errno);
return 0;
}
s->rpos = s->rbuf + e;
if (connect(s->fd, (struct sockaddr *) &sa, sizeof(sa)) >= 0 || errno == EISCONN)
sk_tcp_connected(s);
else if (errno != EINTR && errno != EAGAIN && errno != EINPROGRESS)
- s->err_hook(s, errno);
+ c_err_hook(s, errno);
return 0;
}
default: