请教Linux下SCTP问题
初学网络编程。在fedra13下,在网上下了sctp的源代码,编译,安装成功,lsmod里也有相应模块,[root@localhost bin]# ./checksctp 返回 SCTP supported,安装没问题,支持SCTP协议。但是bind()返回的结果是 bind err: Permission denied 端口没被占用,不知道什么原因,求大神指导下
编译和运行均在root用户下,GDB后,用lsof -p 。。。得
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sctpserv0 19219 root cwd DIR 253,2 4096 1187475 /home/micky/workspace/LearnC/network
sctpserv0 19219 root rtd DIR 253,0 4096 2 /
sctpserv0 19219 root txt REG 253,2 11601 1188695 /home/micky/workspace/LearnC/network/sctpserv01
sctpserv0 19219 root mem REG 253,0 1855564 1835725 /lib/libc-2.12.so
sctpserv0 19219 root mem REG 253,0 141492 1835689 /lib/ld-2.12.so
sctpserv0 19219 root mem REG 253,0 27354 284797 /usr/local/lib/libsctp.so.1.0.11
sctpserv0 19219 root 0u CHR 136,1 0t0 4 /dev/pts/1
sctpserv0 19219 root 1u CHR 136,1 0t0 4 /dev/pts/1
sctpserv0 19219 root 2u CHR 136,1 0t0 4 /dev/pts/1
sctpserv0 19219 root 3r FIFO 0,8 0t0 67663 pipe
sctpserv0 19219 root 4w FIFO 0,8 0t0 67663 pipe
sctpserv0 19219 root 5r FIFO 0,8 0t0 67664 pipe
sctpserv0 19219 root 6w FIFO 0,8 0t0 67664 pipe
sctpserv0 19219 root 7u sock 0,6 0t0 67683 can't identify protocol
sctpserv0 19219 root 12r FIFO 0,8 0t0 20495 pipe
sctpserv0 19219 root 13w FIFO 0,8 0t0 20495 pipe
can't identify protocol 这是为什么?
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netinet/sctp.h>
#include<strings.h>
#define BUFFSIZE 1024
#define SERV_PORT 9006
int sys_err( char const* value )
{
perror(value);
return 1;
}
int main(int argc, char *argv[])
{
int sock_fd,msg_flags;
char readbuf[BUFFSIZE]={0};
struct sockaddr_in servaddr,cliaddr;
struct sctp_sndrcvinfo sri;
struct sctp_event_subscribe events;
int stream_increment = 1;
socklen_t len;
size_t rd_sz;
if(argc ==2 )
return sys_err("please input the IPaddr");
sock_fd = socket(AF_INET,SOCK_SEQPACKET,IPPROTO_SCTP);
if(sock_fd <0)
return sys_err("socket error");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
if( bind(sock_fd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0 )
return sys_err("bind err");
bzero(&events,sizeof(events));
events.sctp_data_io_event = 1;
if(setsockopt(sock_fd,IPPROTO_SCTP,SCTP_EVENTS,&events,sizeof(events))<0)
return sys_err("setsockopt err");
listen(sock_fd,5);
while(1){
len = sizeof(struct sockaddr_in);
rd_sz = sctp_recvmsg(sock_fd,readbuf,sizeof(readbuf),
(struct sockaddr*)&cliaddr,&len,
&sri,&msg_flags);
/* if( stream_increment ){
sri.sinfo_stream ++;
if(sri.sinfo_stream >= sctp_get_no_strms(sock_fd,(struct sockaddr*)&cliaddr,len))
sri.sinfo_stream = 0;
}
*/
sctp_sendmsg(sock_fd,readbuf,rd_sz,
(struct sockaddr*)&cliaddr,len,
sri.sinfo_ppid,
sri.sinfo_flags,sri.sinfo_stream,0,0);
}
}
编译和运行均在root用户下,GDB后,用lsof -p 。。。得
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sctpserv0 19219 root cwd DIR 253,2 4096 1187475 /home/micky/workspace/LearnC/network
sctpserv0 19219 root rtd DIR 253,0 4096 2 /
sctpserv0 19219 root txt REG 253,2 11601 1188695 /home/micky/workspace/LearnC/network/sctpserv01
sctpserv0 19219 root mem REG 253,0 1855564 1835725 /lib/libc-2.12.so
sctpserv0 19219 root mem REG 253,0 141492 1835689 /lib/ld-2.12.so
sctpserv0 19219 root mem REG 253,0 27354 284797 /usr/local/lib/libsctp.so.1.0.11
sctpserv0 19219 root 0u CHR 136,1 0t0 4 /dev/pts/1
sctpserv0 19219 root 1u CHR 136,1 0t0 4 /dev/pts/1
sctpserv0 19219 root 2u CHR 136,1 0t0 4 /dev/pts/1
sctpserv0 19219 root 3r FIFO 0,8 0t0 67663 pipe
sctpserv0 19219 root 4w FIFO 0,8 0t0 67663 pipe
sctpserv0 19219 root 5r FIFO 0,8 0t0 67664 pipe
sctpserv0 19219 root 6w FIFO 0,8 0t0 67664 pipe
sctpserv0 19219 root 7u sock 0,6 0t0 67683 can't identify protocol
sctpserv0 19219 root 12r FIFO 0,8 0t0 20495 pipe
sctpserv0 19219 root 13w FIFO 0,8 0t0 20495 pipe
can't identify protocol 这是为什么?
...全文
相关推荐
linux 下sctp的开源代码
调试时,可以借助GDB(GNU Debugger)等工具检查代码执行过程,定位和修复问题。6.
重编译LINUX内核调整SCTP参数的方法
1. 背景: sctp协议不匹配引发的内核编译。 公司的SIGTRANS在于华为HSTP进行联调时发现,华为的HSTP的SCTP层中INIT消息不认识我们的SCTP层中的INIT消息中的ECN\Forward TSN\ADAPTATION参数。 经过在网络上用搜索引擎反复查找LINUX\SCTP相关资料,才发现LI
linux环境下sctp开源代码
SCTP的设计旨在提供比TCP更高级别的可靠性,同时避免了UDP的无连接特性带来的问题。
sctp.tar.gz_linux server_sctp_udp 重传_拥赛控制协议
当一个接口或网络路径出现问题时,SCTP可以自动切换到其他可用路径,保持通信的连续性。
一种基于SCTP的嵌入式Linux系统高性能数据传输的方法.pdf
SCTP(Stream Control Transmission Protocol,流控传输协议)是一种传输层协议,旨在解决TCP(传输控制协议)的头部阻塞问题以及UDP(用户数据报协议)的安全性和可靠性问题


