65 lines
2.3 KiB
Plaintext
65 lines
2.3 KiB
Plaintext
These are strictly speaking no bugs, but unimplemented features or
|
|
BSD incompatibilities:
|
|
|
|
|
|
Transmission Control Protocol:
|
|
------------------------------
|
|
|
|
- MSS fixed at 536 bytes currently. May use larger values on directly
|
|
connected networks. DONE.
|
|
|
|
- Selecting for exceptional conditions (ie waiting for urgent data)
|
|
does not work. This needs work on the kernel. WORKS with TeSches
|
|
patches applied.
|
|
|
|
- A process is only notified of urgent data arrival via SIGURG when
|
|
he does a read(), write() or select(). FIXED. Signalling is now done
|
|
asynchronously using a separate process.
|
|
|
|
- There is currently no round trip time estimation done for calculating
|
|
the retransmission timeout. DONE.
|
|
|
|
- No "Nagle-Algorithm" implemented.
|
|
|
|
- No congestion avoidance. DONE.
|
|
|
|
- No slow start implemented. DONE.
|
|
|
|
- No delayed acks.
|
|
|
|
- The following is really a bug in BSD. Here are the BSD out-of-band semantics:
|
|
Lets say you write 5 bytes of out of band data using the MSG_OOB
|
|
flag with send().
|
|
Then the receiver will only be able to receive the urgent data if he
|
|
has no other unread urgent data pending. If he has no urgent data
|
|
pending he can receive the last byte of the urgent data using recv()
|
|
with MSG_OOB.
|
|
The other 4 bytes are received as normal data. The "mark" (you can
|
|
query the system if you have received all data up until the mark
|
|
using the SIOCATMARK ioctl) is placed behind these 4 bytes.
|
|
|
|
Here are the MintNet semantics of out of band handling.
|
|
You can write as much urgent data as you want.
|
|
The receiver can read *all* the urgent data using recv() with the
|
|
MSG_OOB flag.
|
|
The "mark" is placed *before* the urgent data byte with the lowest
|
|
sequence number.
|
|
If there are several chunks of urgent data waiting to be read, the
|
|
"mark" moves from the first to the next one when you read data after
|
|
the current position of the mark.
|
|
You can partially emulate the BSD semantics by placing the socket
|
|
into "out-of-band-data-inline" mode using the SO_OOBINLINE socket
|
|
option. You can then read urgent data using MSG_OOB or the normal
|
|
read().
|
|
|
|
User Datagram Protocol:
|
|
-----------------------
|
|
|
|
- recv/recvfrom return the amount of data copied -- not the size of
|
|
the datagram as BSD does with MSG_PEEK.
|
|
|
|
Internet Control Message Protocol:
|
|
----------------------------------
|
|
|
|
- Most message types not implemented.
|