SCTP
has native multi-homing support which if I understand it correctly will automatically reroute your packets over a secondary NIC if the primary interface goes down. I duplicated this functionality with TCP by writing a custom routing deamon to modify the routing tables if my primary NIC goes down. I would like to try using SCTP
instead.
In Steven's Unix Network Programming V1 3rd Edition on page 288 it says:
For this example, we use a one-to-many-style server. We make this choice for one important reason. The examples in Chapter 5 can be modified to run over
SCTP
with one minor change: modify thesocket
function call to specifyIPPROTO_SCTP
instead ofIPPROTO_TCP
as the third argument. Simply making this change, however, would not take advantage of any of the additional features provided bySCTP
except multi-homing.
Now I've tried this with fairly poor results.
I'm running on Ubuntu 9.04 with the libsctp1, libsctp-dev, and lksctp-tools packages installed. I've verified with lksctp-tools that SCTP
is working properly.
I took the UNP example code and modified as indicated above the ~/unpv13e/tcpcliserv/tcpserv04.c
and ~/unpv13e/select/tcpcli02.c
programs.
This is a simple echo server / client pair. The server runs apparently listening, but the client exits saying the connection was refused. Since netstat doesn't support SCTP
I used lsof -n | grep tcpserv
which showed me:
tcpserv04 6208 alice 3u sock 0,4 33889 can't identify protocol
This doesn't seem to tell me much other than tcpserv04 has some kind of socket open.
I had already rewrote and tested the original TCP client in perl, so I switched it to sctp and was able to connect although piping a file on stdin didn't completely work ( hung about 2/3's of the way through receiving the echo's back ).
It seems like UNP is implying that porting TCP applications to SCTP to take advantage of multi-homing is trivial, yet based this simple attempt that doesn't really seem to be the case.
Can anyone point me to a good tutorial or give good advice on any gotcha's to watch out for when porting TCP apps to one-to-one-style SCTP to take advantage of multi-homing?