|
|
//#include "/usr/src/kernels/2.6.18-1.2784.fc6-i686/include/net/sctp/sctp.h"
//#include "unp.h"
#include "../lib/error.c"
#include "../lib/wraplib.c"
#include "../lib/wrapsock.c"
#include "../lib/wrapunix.c"
#include "../lib/writen.c"
//#include "sctp_wrapper.c"
//#include "/usr/src/kernels/2.6.18-1.2784.fc6-i686/include/net/sctp/sctp.h"
//#include "/usr/src/kernels/2.6.18-1.2784.fc6-i686/include/net/sctp/structs.h"
int main(int argc,char **argv)
{
int sockfd,msg_flags;
char readbuff[BUFFSIZE];
struct sockaddr_in servaddr,chiladdr;
struct sctp_sndrcvinfo sri;
struct sctp_event_subscribe evnts;
int stream_increment=1;
socklen_t len;
size_t rd_sz;
if(argc==2)
{
stream_increment=atoi(argv[1]);
}
sockfd=Socket(AF_INET,SOCK_SEQPACKET,IPPROTO_SCTP);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PORT);
Bind(sockfd,(SA *)&servaddr,sizeof(servaddr));
bzero(&evnts,sizeof(evnts));
evnts.sctp_data_io_event = 1;
Setsockopt(sockfd,IPPROTO_SCTP,SCTP_EVENTS,&evnts,sizeof(evnts));
Listen(sockfd,LISTENQ);
for(;;)
{
len = sizeof(struct sockaddr_in);
rd_sz = sctp_recvmsg(sockfd,readbuff,sizeof(readbuff),(SA *)&chiladdr,&len,&sri,&msg_flags);
if(stream_increment)
{
sri.sinfo_stream++;
if(sri.sinfo_stream >= sctp_get_no_strms(sockfd,(SA *)&chiladdr,len))
sri.sinfo_stream=0;
}
sctp_sendmsg(sockfd,readbuff,rd_sz,(SA *)&chiladdr,&len,&sri.sinfo_ppid,sri.sinfo_flags,sri.sinfo_stream,0,0);
}
}
注:错误输出
sctpserv01.c: In function `main':
sctpserv01.c:16: error: storage size of 'sri' isn't known
sctpserv01.c:17: error: storage size of 'evnts' isn't known
sctpserv01.c:36: error: `SCTP_EVENTS' undeclared (first use in this function)
sctpserv01.c:36: error: (Each undeclared identifier is reported only once
sctpserv01.c:36: error: for each function it appears in.)
我通过一个SOCKET选项测试程序也得到了AS4不支持SCTP SOCKET选项,在netinet目录下也没有找到.sctp.h文件 大伙帮忙看看怎么样让AS4支持SCTP SOCKET选项呀先谢谢了. |
|