64,646
社区成员
发帖
与我相关
我的任务
分享
#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);
}
}