安卓系统是否支持SCTP协议

8

我该如何在Android中使用SCTP协议?

我已经知道Android系统默认不支持SCTP,但是可以通过插入SCTP内核模块或者重新构建启用SCTP模块的内核来实现。

我需要一些关于这个问题的见解。这是否可能?如何使Android支持该协议?如何构建内核模块并正确地插入它?如果我们成功使系统支持它,我们该如何使用该协议?Android上的Java API是否支持SCTP?

1个回答

9

用模块的方式是正确的方法。回答您的问题:

  • SCTP已经作为内核模块提供在Linux源代码树中 - "CONFIG_IP_SCTP=m"将启用该模块。您可以将其更改为“y”以进行硬链接,但这可能是不可行的,因为您必须重新构建整个内核。

  • 该模块仍然必须按内核版本构建。因此,基本上每个供应商都需要获取其内核源代码(可以做到),然后针对其进行编译。

使用:在用户模式下 - 通过调用s = socket(AF_INET [6],SOCK_STREAM,IPPROTO_SCTP)创建套接字;从那时起,套接字API完全相同,只有一些例外情况(即setsockopt,它特定于协议类型)。

从Java中 - 实际上支持其最新版本的协议(JDK7截至第3个里程碑),但Java支持它并不意味着Dalvik(Android的“java vm”)也支持它。尽管Android确实准备好了SCTP支持,但它还没有出现在Dalvik中(至少不在4.2中)。您可以创建一个Java类,例如包装带有SCTP调用的本地库。由于NET权限的原因,在Android中有点棘手,但仍然可管理(根据经验)。


感谢您提供有用的答案。我将要为Android模拟器构建模块,内核源代码可通过代号goldfish获得。您能否指导我或引荐一份如何操作的文档,以便我可以为特定的内核构建模块。另外,我该如何使模块持久化,在每次启动时插入模块。 - Meti
1
在您的测试期间,为使模块持久化,最好的方法是修改/init.rc。至于如何操作... 这是构建Linux内核的一部分。获取相应内核的源代码树,然后进入sctp目录(如果我没记错,是./net/sctp)。然后进行编译(make)。这将产生.ko文件。如果您在设备上,则确保使用NDK进行编译,以便交叉编译到ARM架构。 - Technologeeks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接