You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The issue appears to be in ckcnet.c, function netinc. The select call (guarded by #ifdef BSDSELECT) isn't working properly on Windows NT 3.1 for some unknown reason. It always appears to report ttyfd isn't ready to read (rc == 0 && !FD_ISSET(ttyfd, &rfds)) even when ttchk() (and its call to socket_ioctl(ttyfd,FIONBIO,&y)) reports there being bytes waiting to be read.
Given the FIONBIO ioctl has said there are bytes waiting to be read, the select() call should be saying ttyfd is read to be read but it isn't. This is only an issue on Windows NT 3.1 - this exact same code built with the same compiler works fine on other all other Windows versions. And if netinc is adjusted to ignore the select() result and instead try to read if ttchk() says there is data to be read, the problem goes away (and is replaced with another one - FIONBIO isn't very fast and apparently has the potential to be buggy).
I assume select() isn't outright broken on NT 3.1, its possible C-Kermit is just doing something that Windows NT 3.1 doesn't like. Just what that could be I have no idea at this time. Perhaps SO_OOBINLINE? Only out-of-band selects seem to be working - perhaps that's related. Or maybe some threading or timing issue? It doesn't always die at the exact same place so its not a matter of it breaking after receiving x bytes - sometimes it breaks immediately, sometimes it breaks after receiving a few screenfuls of data.
The text was updated successfully, but these errors were encountered:
The issue appears to be in ckcnet.c, function netinc. The select call (guarded by
#ifdef BSDSELECT
) isn't working properly on Windows NT 3.1 for some unknown reason. It always appears to report ttyfd isn't ready to read (rc == 0 && !FD_ISSET(ttyfd, &rfds)
) even whenttchk()
(and its call tosocket_ioctl(ttyfd,FIONBIO,&y)
) reports there being bytes waiting to be read.Given the FIONBIO ioctl has said there are bytes waiting to be read, the
select()
call should be saying ttyfd is read to be read but it isn't. This is only an issue on Windows NT 3.1 - this exact same code built with the same compiler works fine on other all other Windows versions. And if netinc is adjusted to ignore the select() result and instead try to read if ttchk() says there is data to be read, the problem goes away (and is replaced with another one - FIONBIO isn't very fast and apparently has the potential to be buggy).I assume select() isn't outright broken on NT 3.1, its possible C-Kermit is just doing something that Windows NT 3.1 doesn't like. Just what that could be I have no idea at this time. Perhaps SO_OOBINLINE? Only out-of-band selects seem to be working - perhaps that's related. Or maybe some threading or timing issue? It doesn't always die at the exact same place so its not a matter of it breaking after receiving x bytes - sometimes it breaks immediately, sometimes it breaks after receiving a few screenfuls of data.
The text was updated successfully, but these errors were encountered: