On Tue, 2013-04-30, Rick Jones wrote:
> Indeed, a FIN bit being set on a TCP segment also carrying data means
> either:
>
> *) The application called shutdown() or close() against the socket
> before the last bytes had sufficient classic or congestion window
> to be sent to the receiver, so the FIN was piggy backed onto the
> data.
>
> or perhaps
>
> *) Some of the last bytes of data had to be retransmitted, and the
> retransmission came after a "standalone" FIN was sent.
I'd call that "implies that one of the following conditions apply"
rather than "means".
For the benefit of the OP, what data + FIN /means/ is simply the last
N octets of data followed by the normal end-of-stream marker, FIN.
FIN (and SYN, and I guess RST) can be seen as being part of the
stream; they have sequence numbers just like the data octets.
And based on what people write in this thread[1], it seems that not
only does data+FIN have a meaning, but (a) it's not disallowed for
some other reason and (b) it can happen in reality with real stacks
and applications.
/Jorgen
[1] I didn't see anyone quote chapter and verse; someone referenced
RFC 1379, but that one describes a slightly different protocol.
--
// Jorgen Grahn <grahn@ Oo o. . .
\X/
snipabacken.se> O o .