I got stuck for a week on a regression test failure while trying to fix TS-1077. I eventually tracked it down to NetVCOptions::frequent_accept defaulting to true instead of false. Checking the source control logs it turns out that I had it as false when I first checked in the main patch, but then tweaked it back to true in a minor fixup patch. I can, of course, no longer recall why I thought I needed to change that. Looking at the 2.1.7 codebase it seems that prior to the NetVCOptions change, the value was passed explicitly as false everywhere except for testing code and examples. The symptoms were that the accepted socket would be marked as IO read ready right after the accept even though there was no data on available. The main IO loop would then read it, get 0 bytes, and close it. After I changed the default to false, regression passed and I am currently doing successful live testing.
I don't know why I haven't seen this effect before, as the default change was almost 5 months ago. 1) Is there any evidence that the default for frequent_accept (that is, use fastAccept) should remain true instead of false (do not use)? 2) Should we just get rid of the fast accept path if it is only used in examples and testing?