On Dec 3, 2019, at 9:18 AM, David G. Miller <dave at davenjudy.org> wrote: > > On 12/3/19 8:46 AM, Jerry Geis wrote: >> I am experiencing an issue that my process does not wake out of a select() >> call when a single character is received in an input file descriptor when >> running as a VMware guest. You imply but don’t say that this doesn’t happen when the app is running on bare metal. Is that the case? >> Anyone ever experienced this ? No, and I’ve been writing sockets-type code since the days when it wasn’t clear whether BSD sockets would win out over AT&T TLI/XTI/STREAMS. >> once in a while that character is "delayed" getting to my input buffer. That’s probably the Nagle algorithm: https://en.wikipedia.org/wiki/Nagle%27s_algorithm It’s intentional. You almost never want to disable it. > Perl apps can either be line buffered or character buffered I think that’s controlled by the kernel’s terminal driver code, not by Perl. Perl is just giving you an alternate configuration to the underlying termios() or whatever call controls this. Anyway, you have to go out of your way to get line-buffered sockets on Linux. One way is to bind a socket to a pty, as ssh does, bringing the terminal I/O code into it again, but I doubt Jerry’s doing that. I’d bet Jerry's app is just making assumptions about the way TCP works that just aren’t true. Jerry, please show your sockets setup code and the skeletonized read loop. I’m talking socket(), bind(), setsockopt(), etc. I want to see every sockets call. Your app logic you’re free to keep hidden away.