sctpserv05.c

来自「unix网络编程卷1:套接口API的全书源码」· C语言 代码 · 共 55 行

C
55
字号
#include	"unp.h"intmain(int argc, char **argv){	uint8_t *readbuf;	int sock_fd,msg_flags;	struct sockaddr_in servaddr, cliaddr;	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]);        sock_fd = 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(sock_fd, (SA *) &servaddr, sizeof(servaddr));		bzero(&evnts, sizeof(evnts));	evnts.sctp_data_io_event = 1;	Setsockopt(sock_fd, IPPROTO_SCTP, SCTP_EVENTS,		   &evnts, sizeof(evnts));	Listen(sock_fd, LISTENQ);	rd_sz = 0;/* include mod_serv05 */	for ( ; ; ) {		len = sizeof(struct sockaddr_in);		bzero(&sri,sizeof(sri));		readbuf = pdapi_recvmsg(sock_fd, &rd_sz,					(SA *)&cliaddr, &len,					&sri,&msg_flags);		if(readbuf == NULL)		   continue;/* end mod_serv05 */		if(stream_increment) {			sri.sinfo_stream++;			if(sri.sinfo_stream >= sctp_get_no_strms(sock_fd,(SA *)&cliaddr, len)) 				sri.sinfo_stream = 0;		}		Sctp_sendmsg(sock_fd, readbuf, rd_sz, 			     (SA *)&cliaddr, len,			     sri.sinfo_ppid,			     sri.sinfo_flags,			     sri.sinfo_stream,			     0, 0);	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?