请教Linux下SCTP问题

ch888168930 ch888168930 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
初学网络编程。在fedra13下,在网上下了sctp的源代码,编译,安装成功,lsmod里也有相应模块,[root@localhost bin]# ./checksctp 返回 SCTP supported,安装没问题,支持SCTP协议。但是bind()返回的结果是 bind err: Permission denied 端口没被占用,不知道什么原因,求大神指导下

#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 这是为什么?
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
ch888168930
Linux/Unix社区 23,224 成员 74,535 内容