如何将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);
}

init_server是创建套接字的函数

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 (将#修改为@)