SCTP
具有本地多宿主支持,如果我理解正确,它会在主接口失效时自动将数据包重定向到次要网卡。我通过编写一个自定义路由守护程序来复制此功能,以便在我的主要网卡失效时修改路由表。我想尝试使用SCTP
。
在Steven的《Unix网络编程第1卷第3版》第288页中写道:
对于这个示例,我们使用一种一对多样式的服务器。我们做出了这个选择,因为有一个重要的原因。第5章中的示例可以通过进行一个小的更改:将
socket
函数调用修改为指定IPPROTO_SCTP
而不是IPPROTO_TCP
作为第三个参数来运行SCTP
。然而,仅进行这个更改并不能利用SCTP
提供的任何其他功能,除了多宿主。
现在我已经尝试过这个方法,但效果很差。
我正在Ubuntu 9.04上运行,安装了libsctp1、libsctp-dev和lksctp-tools软件包。我已经使用lksctp-tools验证了SCTP
的正常工作。
我采用了UNP示例代码,并按照上述方法修改了~/unpv13e/tcpcliserv/tcpserv04.c
和~/unpv13e/select/tcpcli02.c
程序。
这是一个简单的回显服务器/客户端对。服务器似乎在运行并监听,但客户端退出并显示连接被拒绝。由于netstat不支持SCTP
,我使用lsof -n | grep tcpserv
,它显示:
tcpserv04 6208 alice 3u sock 0,4 33889 can't identify protocol
这似乎并没有告诉我太多,除了 tcpserv04 有某种套接字打开。
我已经重新编写和测试了原始的 TCP 客户端,所以我将其切换到 SCTP 并能够连接,尽管在标准输入上传输文件时不完全起作用(在接收回显的过程中大约被挂起了三分之二)。
UNP 看起来在暗示将 TCP 应用程序移植到 SCTP 以利用多重主机是微不足道的,但基于这个简单的尝试,情况似乎并非如此。
是否有人可以指向一个好的教程或给出良好的建议,在将 TCP 应用程序移植到一对一式 SCTP 以利用多重主机时需要注意什么?