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

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



EOF and error event will be set if remote has performed shutdown. In my case remote machine suddenly went down so my client did not get any pkts.


On Mar 3, 2017 1:05 PM, "Azat Khuzhin" <a3at.mail@xxxxxxxxx> wrote:
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.