I'm trying to close socket on windows from closesocket(), but it takes 20 sec to complete. at first I thought it was about linger interval, although I was not setting anything with setsockopt by linger, so I added such code:
linjer lobj;
lobj.l_onoff = 1;
lobj.l_linger = 0;
sz = sizeof(lobj);
setsockopt(s_, SOL_SOCKET, SO_LINGER, (char *) &lobj, sz);
but it still does not help.
any ideas? I just want to close connection, doesnt matter if its gracefull or abortion, just want to close it as soon as possible.
P.S. it takes exactly 20 sec.
lobj.l_onoff = 1;
lobj.l_linger = 0;
sz = sizeof(lobj);
setsockopt(s_, SOL_SOCKET, SO_LINGER, (char *) &lobj, sz);
lobj.l_onoff = -1;
lobj.l_linger = -1;
getsockopt(s_, SOL_SOCKET, SO_LINGER, (char *) &lobj, &sz);
log << "Option 1:" << lobj.l_linger << ".\n";
log << "Option 2:" << lobj.l_onoff << ".\n";
closesocket(s_);
this code prints option1 = 0 and option2 = 1, so it really sets option correctly.
Also, observing from wireshark, it sends RST at the beginning of whole delay.
plus, closesocket() returns 0.
P.S. I have set SO_REUSADDR, can it be causing it?