我有大量已移植到 NaCl 的现有 BSD 套接字代码。我能够构建、链接和运行此代码,但是一旦到达套接字代码,NaCl 模块就会崩溃。
我现在使用 nacl_io
,但是当我尝试调用 TCP 连接函数时,出现 errno 38
错误意思是
#define ENOSYS 38 /* Function not implemented */
为什么要调用
connect
功能失败,但我能够通过 gethostbyname()
成功解析主机?请注意,我使用的示例代码来自
nacl_io
演示。演示中的代码工作正常,但是当复制到我自己的项目时,调用 connect()
时出现错误.
最佳答案
只要您首先调用 nacl_io_init_ppapi 函数,connect() 就不应返回 ENOSYS。
我最初在 pthread 之后列出的 make 文件中有 nacl_io。将 nacl_io 移到链接器列表的前面解决了这个问题。
nacl_io 定义了一些在 libpthread 中定义的函数。如果 libpthread 在 nacl_io 之前列出,则使用来自 libpthread 的函数,如果在 nacl_io 之后列出,则使用来自 nacl_io 的函数。
关于sockets - NaCl 中的套接字代码损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22492182/