当前位置:  技术问答>linux和unix

sctp的问题

    来源: 互联网  发布时间:2016-11-18

    本文导语:  我在2.6.14.7kernel的linux上测试SCTP,sctp版本1.04-1 用Select模型接收数据 如下方法发送数据 if(FD_ISSET(fileno(stdin), &rdfds)) { memset(kb_input,0,64); fgets(kb_input,64,stdin); kb_input[strlen(kb_input)-1] = 0x00; if (strcmp...

我在2.6.14.7kernel的linux上测试SCTP,sctp版本1.04-1

用Select模型接收数据

如下方法发送数据
if(FD_ISSET(fileno(stdin), &rdfds))
{
memset(kb_input,0,64);
fgets(kb_input,64,stdin);
kb_input[strlen(kb_input)-1] = 0x00;
if (strcmp(kb_input,"quit")== 0) exit(0);
printf("send %s to servern",kb_input);
ret = sctp_sendmsg(dc_connect_socket,
  (void *)kb_input, strlen(kb_input),
(struct sockaddr *)&servaddr, sizeof(servaddr),0, 0, 0, 0, 0 );
                                }
对方可以接收到数据。

但是,如果这样写:

if(FD_ISSET(fileno(stdin), &rdfds))
{
memset(kb_input,0,64);
fgets(kb_input,64,stdin);
kb_input[strlen(kb_input)-1] = 0x00;
if (strcmp(kb_input,"quit")== 0) exit(0);
printf("send %s to servern",kb_input);
ret = sctp_sendmsg(dc_connect_socket,
  (void *)kb_input, 64,
(struct sockaddr *)&servaddr, sizeof(servaddr),0, 0, 0, 0, 0 );
                                }
对方就接收不到数据。(只是将发送数据的长度修改了一下)。
现象是,在对方的计算机上抓包可以看到数据发送过来了,但是,接收数据方判断FD_ISSET(socket,&rfdset) 不通过。程序进入不了接收函数。

请问是不是正常,如何解决,谢谢


|
1、從你描述的過程看,你應該是client端吧,init 和cookie_echo是你發出去的吧

2、SCTP建立需要四條消息交互init、init_ack、cookie_echo、cookie_ack。現在你發出去cookie_echo了,但是

沒有收到對方的cookie_ack,對吧?

3、你的cookie_echo裏面帶了data chunk,而server端對這個data chunk的處理不正常,導致不會發cookie_ack

給你,對吧?

你先回答我下,上面我的猜測對不對。然後你能否抓個wireshark的trace上來看看呢?

|
现象是,在对方的计算机上抓包可以看到数据发送过来了,但是,接收数据方判断FD_ISSET(socket,&rfdset) 不通过。程序进入不了接收函数。 


接受方的也是select?你先用ethreal抓包看看,我觉得发送应该是成功的,你先确认是否有收到包先。

|
信箱已经私信mail给你了,请按照私信中写的做,谢谢!

|
Like TCP, SCTP provides reliable, connection oriented data delivery with congestion control. Unlike TCP, SCTP also provides message boundary preservation, ordered and unordered message delivery, multi-streaming and multi-homing. Detection of data corruption, loss of data and duplication of data is achieved by using checksums and sequence numbers. A selective retransmission mechanism is applied to correct loss or corruption of data.

|
只要對端能收到,就說明連接是沒問題的,我覺得這個問題不是出在SCTP協議上,而是出在函數調用或者消息凈

荷上。SCTP的四次握手連接已經沒問題了,連接已經建立了,如果基於這個連結的消息傳遞不正常,通常都不是

SCTP的問題了,應該從消息上分析。建議你去查一下sctp_sendmsg()這個函數的詳細說明

如果有問題可以貼上來,SCTP這個我還是比較熟悉的

    
 
 

您可能感兴趣的文章:

  • SCTP连接的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • sctp协议的适配层是干什么的??
  • sctp心搏的超时以及重传控制
  • 求解linux源码中的这段SCTP程序


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3