问题描述
我有一个使用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 (将#修改为@)