quite simple network question
Wojciech Puchar
wojtek at puchar.net
Fri Jul 5 06:28:29 UTC 2019
i wrote a program with client and server part - running under FreeBSD.
Client program use socket, then connect to establish TCP connection to
server.
then it uses select every now and then to check if anything came from
server, when select returns nonzero recv is executed.
If recv returns negative or zero - connection error is assumed, close is
called and disconnect reported to user.
This works almost properly:
a) reception works fine
b) when server disconnects it's detected and reported.
But if network fails (for simulating i simply turn ethernet interface off)
it doesn't see it for a long time.
so between socket and connect i added
a=1;
setsockopt(serverconnfd,SOL_SOCKET,SO_KEEPALIVE,&a,sizeof(a));
a=5; //KEEPALIVE co 5 sekund
setsockopt(serverconnfd,SOL_SOCKET,TCP_KEEPIDLE,&a,sizeof(a));
setsockopt(serverconnfd,SOL_SOCKET,TCP_KEEPINTVL,&a,sizeof(a));
a=2; //2 próby nim uzna że rozłączony
setsockopt(serverconnfd,SOL_SOCKET,TCP_KEEPCNT,&a,sizeof(a));
and i assumed it will keepalive every 5 seconds and after 2 failures
behave as disconnect.
But even after minute of waiting i don't get disconnect.
What i am doing wrong?
More information about the freebsd-hackers
mailing list