10.1
|
If the sctp_sendmsg function returns an
error, no message will be sent and the application would then do a
blocking sctp_recvmsg, waiting for a response message that
would never be sent to it.
A way to fix this is to check the error return
codes, and if an error occurs on sending, the client should NOT do
the receive, but instead should report an error.
If the sctp_recvmsg function returns an
error, no message will arrive and the server will still attempt to
send a message, possibly setting up an association. To avoid this,
the error code should be checked, and depending on the error, you
may wish to report the error and close the socket, letting the
server also then receive an error; or, if the error is transient,
you could retry the sctp_recvmsg call.
|
10.2
|
If the server receives a request and then exits,
the client in its current form will hang forever waiting for a
message that will never come. A method that can be used by the
client to detect this is to enable association events. This will
allow the client application to receive a message when the server
exits, telling the client that the association is now gone. This
would allow the client to then take a recovery action such as
contacting a different server.
An alternative method the client could use is to
set up a timer and abort after some time period.
|
10.4
|
The Nagle algorithm (controlled by the
SCTP_NODELAY socket option; see Section 7.10)
will cause a problem only if we choose a small data transfer size.
So as long as we send a size that forces SCTP to send immediately,
no harm will occur. However, choosing a smaller size for
out_sz would skew the results, holding some transmissions
awaiting SACKs from the remote endpoint. So if a smaller size is to
be used, turning off the Nagle algorithm (i.e., turning on the
SCTP_NODELAY socket option) would be a good idea.
|
10.5
|
If an application sets up an association and
then changes the number of streams, the association will not have a
different number of streams, it will have the original number
before the change. This is because changing the number of streams
only affects new associations, not existing ones.
|