If there are multiple OOB data bytes outstanding, Currently Solaris sets RCVATMARK for every OOB data byte, However it only returns the last OOB data byte when OOB data is read (SO_OOBINLINE is not set). Solaris documentation does not seem to specify what the behavior should be. However it seems other OS's have different behavior.

IBM: http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/rzab6/rzab6coobd.htm

The SIOCATMARK ioctl() request determines if the read pointer is pointing to the last OOB byte.
Note:
If multiple occurrences of OOB data are sent, the OOB marker points to the last OOB byte of the final OOB data occurrence.


MSFT: http://msdn.microsoft.com/en-us/library/ms740102(VS.85).aspx

With SO_OOBINLINE enabled, the urgent data remains in the data stream. As a result, the OOB data block is never lost when a new TCP segment arrives containing urgent data. The existing OOB data mark is updated to the new position.

*Note* When the SO_OOBINLINE socket option is set, the SIOCATMARK IOCTL always returns TRUE, and OOB data is returned to the user as normal data.

It seems that Solaris behavior of setting RCVATMARK for every OOB on the way to the last OOB is incorrect. It is also not clear if a read can consume intermediate OOB bytes and what the behavior should be when SO_OOBINLINE is set/cleared while OOB bytes are pending.

We are reimplementing sockets as part of project Volo and would like to get the correct semantics without breaking any applications. So we are looking for input or a pointer to a standard that specifies the socket semantics in these cases.

Thanks,

Rao.


_______________________________________________
networking-discuss mailing list
[email protected]

Reply via email to