[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [Libevent-users] bufferevent_write succeeds on a dead tcp connection



On Fri, Mar 3, 2017 at 8:20 AM, prashantkumar dhotre
<prashantkumardhotre@xxxxxxxxx> wrote:
> Hi
> server machine went unreachable and tcp connnection to server remained
> 'established'.
> in this scenario, i see that bufferevent_write still succeeds.
> It should fail. right ?

Hi,

No, bufferevent_write() will add passed buffer to internal one, and
once bufferevent will be ready to accept data it will send it to it.

> if this is expected behavior , then how do i detect a dead tcp connection ?

You should check for BEV_EVENT_EOF/BEV_EVENT_ERROR in eventcb:

static void
eventcb(struct bufferevent *bev, short events, void *user_data)
{
    if (events & BEV_EVENT_EOF) {
        printf("Connection closed.\n");
    } else if (events & BEV_EVENT_ERROR) {
        printf("Got an error on the connection: %s\n", strerror(errno));
    }
    bufferevent_free(bev);
}
bufferevent_setcb(bev, readcb, writecb, eventcb, NULL);
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users    in the body.