Linux:获取sctp连接的套接字选项时出错

时间:2014-07-16 21:58:03

标签: linux sockets sctp

在建立一对一sctp连接期间,在sctp连接的accept()之后,内部服务器日志中会报告以下错误:

  

“获取套接字的套接字选项时出错:13”

从错误中看,似乎getsockopt()返回了一个错误,并根据“getsockopt(2) - Linux手册页”中的函数说明设置errno来指示原因。

我需要你的帮助才能知道如何检查错误并跟踪失败的原因。

仅供参考,来自tcpdump我有以下消息流,连接被服务器关闭。

  

没有。时间源目标协议消息

     

19716 16:47:25.174569客户端服务器SCTP INIT
  19717 16:47:25.174667服务器客户端SCTP INIT_ACK
  19718 16:47:25.174905客户端服务器SCTP COOKIE_ECHO
  19719 16:47:25.174962服务器客户端SCTP COOKIE_ACK
  19720 16:47:25.175175服务器客户端SCTP SHUTDOWN
  19721 16:47:25.175507客户端服务器SCTP SHUTDOWN_ACK
  19722 16:47:25.175537服务器客户端SCTP SHUTDOWN_COMPLETE

感谢您的支持, 提前致谢

2 个答案:

答案 0 :(得分:0)

这是你的代码吗?您应该使用strerror_r从错误号中获取消息。否则,您可以安装perror二进制文件来打印数字错误。

13似乎是EACCES,在手册页中没有记录(Linux上常见的问题)。快速内核搜索似乎表明最常见的原因是未启用sctp身份验证/加密,但这绝不是决定性的。

答案 1 :(得分:0)

服务器生成cookie并通过INIT块发送给客户端。客户端回复带有cookie的回声,该回声应具有用于认证的签名。通过INIT ACK块有效生命周期。通过INIT ACK块接收的cookie应由服务器验证为一种认证机制。如果服务器无法成功验证cookie并使用它来构建TCB,那么它就不会继续建立和使用该关联。

请注意,perror只是一个函数,它会为您提供给定错误代码的标准错误消息。也就是说,如果你调用write()并且如果有错误,你可以在write()之后立即调用perror来了解实际的错误。它在stdio.h中声明。

使用perror时遇到困难,你可以尝试相当于perror: fprintf(stderr,“%s \ n”,strerror(errno));