[OpenIndiana-discuss] nonblocking i/o problem

Peter Tribble peter.tribble at gmail.com
Sun Apr 9 09:08:36 UTC 2017


On Wed, Apr 5, 2017 at 9:16 AM, Jeff Woolsey <jlw at jlw.com> wrote:

> Based on an assurance
> [https://wiki.illumos.org/display/illumos/illumos+FAQs, Is illumos
> compatible with Solaris/OpenSolaris?] that OI-hipster was upward
> binary-compatible with S10


We probably need to fix the FAQ clarify the conditions under which that
is actually true.

As an aside, there are limitations. The conditions were always pretty
strict,
so that compatibility only applies to (a) Solaris itself, and (b) only those
interfaces explictly marked as being compatible. This explicitly excludes
any 3rd-party applications and libraries that are shipped with Solaris, and
as
of Solaris 10 there were a *lot*. In particular, link with the system
openssl
and you're in trouble. What I've found in general is that older (pre-S10)
applications tend to be fine, S10-native applications can be problematic.

There's also the fact that we don't claim compatibility with any version
of Solaris after the fork. So S10U10 is OK, S10U11 is problematic, S11
is essentially a no-go area.


> and that any discrepancies were to be
> reported, and some S10 exploits becoming more widely known, I upgraded
> from Solaris S10XU8 to OI-hipster-2016.10.   There was some teething,
> and one thing I still haven't resolved is an S10 binary that works right
> in S10 and wrong in OI regarding non-blocking reads of stdin.  It
> happens to be my main project, of course...
>
> truss, in short, says:
>
> Solaris X86 S10U8
>
> fcntl(0, F_GETFL)                               = 2
> fcntl(0, F_SETFL, FWRITE|FNONBLOCK)             = 0
> read(0, 0xFFFFFD7FFF0C0028, 4096)               Err#11 EAGAIN
> fcntl(0, F_SETFL, FWRITE|FOFFMAX)               = 0
>
> Openindiana-hipster 2016.10
>
> fcntl(0, F_GETFL)                               = 8194
> fcntl(0, F_SETFL, FWRITE|FOFFMAX|FNONBLOCK)     = 0
> read(0, 0xFFFFFD7FFF0C0028, 4096)               = 0
> fcntl(0, F_SETFL, FWRITE|FOFFMAX)               = 0
>
>
> Does anybody know why the behavior is different, and how to get the
> former under OI.  I expect there is some library difference somewhere.
> I've been poking at tcsetattr to tweak this, and the best I can do is
> see 4 characters get queued up before the program gets them (S10U8 does
> that with different termios flags, too).   read() returning 0 instead of
> EAGAIN is interpreted as EOF and the program quits, rather clumsily.
>

I don't suppose you have the source? (I guess you may not have, as if
you did then you could just recompile it.)

Where does stdin come from, because it's different in the 2 cases (under
OI it's largefile enabled, from your truss output)?

-- 
-Peter Tribble
http://www.petertribble.co.uk/ - http://ptribble.blogspot.com/


More information about the openindiana-discuss mailing list