免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3063 | 回复: 5
打印 上一主题 下一主题

[已解决]使用SCTP接口编程时,找不到<netinet/sctp>头文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-11 15:03 |只看该作者 |倒序浏览
同标题;
我使用的是redhat9
2.4.20的内核
该如何解决这个问题?

[ 本帖最后由 zhuhefang2006 于 2009-2-11 13:21 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-03-11 16:25 |只看该作者
好像是2.6才支持SCTP吧?不是很清楚,但Linux默认的内核是没有编SCTP进去滴

大概差不多是这个样子滴,不太确定,SCTP我比较喜欢FreeBSD7.0,呵呵

论坛徽章:
0
3 [报告]
发表于 2008-03-15 13:57 |只看该作者
我升级到2.6的内核了,运行如下代码时还是有问题,bind 出错。
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define MAXLINE 256

void str_echo(int sockfd)
{
        ssize_t n;
        char buf[MAXLINE];

again:
        while ((n = read(sockfd, buf, MAXLINE)) > 0)
                write(sockfd, buf, n);
        if (n < 0 && errno == EINTR)
                goto again;
        else if (n < 0)
        {
                printf("str_echo:read error\n");
                exit(0);
        }
}


int main(int argc, char *argv[])
{
        int listenfd, connfd;
        pid_t childpid;
        socklen_t clilen;
        struct sockaddr_in cliaddr, servaddr;

        bzero(&servaddr, sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        servaddr.sin_port = htons(2008);
        servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
       
        listenfd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
        if (listenfd == -1)
        {
                printf("socket error\n");
                exit(0);
        }

        if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1)
        {
                printf("bind error\n");
                exit(0);
        }

        if (listen(listenfd, 5) == -1)
        {
                printf("listen error\n");
                exit(0);
        }
       
        for ( ; ; )
        {
                clilen = sizeof(cliaddr);
                connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &clilen);
                if (connfd == -1)
                {
                        printf("accept error\n");
                        exit(0);
                }
                childpid = fork();
                if (childpid == -1)
                {
                        printf("fork error\n");
                        exit(0);
                }
                if (childpid == 0)
                {
                        close(listenfd);
                        str_echo(connfd);
                        exit(0);
                }
                close(connfd);
        }
}

论坛徽章:
0
4 [报告]
发表于 2008-03-15 23:29 |只看该作者
自己顶一下,:)

论坛徽章:
0
5 [报告]
发表于 2008-03-20 23:09 |只看该作者
这哥子赶潮流哦  开始用sctp了

论坛徽章:
0
6 [报告]
发表于 2009-02-11 13:21 |只看该作者
socket()error, 不是bind() error

看来还是内核不支持SCTP
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP