如何解决如何将TCP客户端服务器应用程序转换为SCTP应用程序?
我有一个使用TCP连接的C编程语言客户端服务器应用程序。仅考虑服务器端。
主要功能如下:
int main(int argc,char* argv[])
{
struct addrinfo *ailist,*aip,hint;
int sockfd,err,n;
memset(&hint,sizeof(hint)); //set to 0 all bytes
hint.ai_flags |= AI_PASSIVE;
hint.ai_socktype = SOCK_STREAM;
hint.ai_addr = NULL;
hint.ai_next = NULL;
if((err = getaddrinfo(NULL,"60185",&hint,&ailist))!=0)
{
printf("Error getaddrinfo %d\n",gai_strerror(err));
syslog(LOG_ERR,"ruptimed: getaddrinfo error %s",gai_strerror(err));
exit(1);
}
for (aip = ailist; aip!=NULL; aip = aip->ai_next)
{
if ((sockfd = initserver(SOCK_STREAM,aip->ai_addr,aip->ai_addrlen,QLEN))>=0)
{
serveImg(sockfd);
printf("Exiting \n");
exit(0);
}
}
exit(1);
}
int initserver(int type,const struct sockaddr *addr,socklen_t alen,int qlen)
{
int fd,err;
int reuse = 1;
if ((fd = socket(addr->sa_family,type,0))<0)
{
return (-1);
}
if (setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(int))<0)
{
goto errout;
}
if(bind(fd,addr,alen)<0)
{
goto errout;
}
if (type == SOCK_STREAM || type == SOCK_SEQPACKET)
{
if(listen(fd,qlen)<0)
{
goto errout;
}
}
return fd;
errout:
err = errno;
close (fd);
errno = err;
return(-1);
}
如您所见,我已经使用了用于TCP连接的SOCK_STREAM
套接字。该应用程序正常工作。
现在,我想将应用程序转换为使用SCTP协议。为此,我尝试使用SOCK_SEQPACKET
代替SOCK_STREAM
。我在OSX和Ubuntu上都尝试了该程序。在前者上,函数getaddrinfo
返回错误Bad hints
,而在后者上,main
程序退出而没有开始服务(永远不满足条件if ((sockfd = initserver(...))>=0)
)。
如何将TCP应用程序转换为SCTP应用程序?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。