SCTP客户/服务器程序编译过程中遇到的问题

问题1:关于IPPROTO_SCTP的报错

解决方法:在/usr/include/netinet/in.h和/usr/include/netinet/sctp.h中都对IPPROTO_SCTP进行了定义,导致编译报错

                 将sctp.h中的IPPROTO_SCTP的定义注释掉就好了

                 #define IPPROTO_SCTP  132


问题2:直接使用gcc server.c -o server编译报错

            /tmp/ccuHHXTA.o:在函数‘Sctp_recvmsg’中:
            server.c:(.text+0x217):对‘sctp_recvmsg’未定义的引用
            /tmp/ccuHHXTA.o:在函数‘Sctp_sendmsg’中:
            server.c:(.text+0x291):对‘sctp_sendmsg’未定义的引用
            /tmp/ccuHHXTA.o:在函数‘Sctp_bindx’中:
            server.c:(.text+0x2d8):对‘sctp_bindx’未定义的引用
            /tmp/ccuHHXTA.o:在函数‘sctp_address_to_associd’中:
            server.c:(.text+0x40b):对‘sctp_opt_info’未定义的引用

            collect2: error: ld returned 1 exit status

解决方法:gcc server.c  -L/usr/local/v6/lib -lm -lsctp -o server


问题:3:程序运行时报错

             服务器端:getsockopt error: Invalid argument

             客户端:sctp_recvmsg error: Transport endpoint is not connected

解决办法:修改sctp_get_no_strms函数(定义在wrapper.c中)

                server.c程序中:将

                 if (sri.sinfo_stream >= sctp_get_no_strms(sockfd,(struct sockaddr*)&clieaddr, len)) {

                            sri.sinfo_stream = 0; } 修改为:

                  

                 if (sri.sinfo_stream >= sctp_get_no_strms(sockfd,(struct sockaddr*)&clieaddr, len, sri)) {

                            sri.sinfo_stream = 0; }


                wrapper.c程序中: 将

                 sctp_get_no_strms(int sock_fd,struct sockaddr *to, socklen_t tolen) 修改为

                 sctp_get_no_strms(int sock_fd,struct sockaddr *to, socklen_t tolen, struct sctp_sndrcvinfo sri)

                  同时将函数中:

                 status.sstat_assoc_id = sctp_address_to_associd(sock_fd,to,tolen); 修改为

                 status.sstat_assoc_id = sri.sinfo_assoc_id;


猜你喜欢

转载自blog.csdn.net/liang_gu/article/details/80735780