UNP学习第十章,解决unp.h与sctp.h冲突重定义问题

前言

最近忙着复习考试,所以学习的进度变慢了,我原本定下来的计划是5月底看完这本书,但是现在才看了1/3,估计要拖到6月了。。。

 

         现在我想换一个写博客的方式,不再一周一更了。一是因为现在忙着复习,一周的进度不多,二是感觉每周写一篇的内容实在太多了,没有一个专一的主题,写出来的博客我自己也不太想再读了。以后还是遇到什么问题,解决了之后就写一篇博客好了,长短无所谓,重点是解决了什么样的问题。

 

第十章SCTP客户/服务器的程序例子

         这一章的编写的代码内容用上了不少在第九章里学到的SCTP套接字编程函数和设置内容,编写代码时需要不时的翻看之前的内容,也让我更清楚的明白了不要在第九章这里花费太多的时间,实际动手写一个程序,这些函数就都明白了。

         P224页的SCTPserv01.c程序,我照着书本敲完了,结果编译的时候发现出现了未定义的情况

         structsctp_sndrcvinfo
         structsctp_event_subscribe


都没有定义。像这样结构体的定义,一般都是定义在.h文件之中,搜索/usr/include库之后,找到了sctp.h的头文件。

加入了该文件之后,结果出现了一大推的重定义,是和unp.h里的内容冲突了。显然,这时候有两种做法。

1.      找到最开始缺少定义的结构体定义,在sctp.h中寻找,然后添加进unp.h中,这显然是最简单的做法

2.      放弃unp.h,把需要的头文件自己找齐,放弃依赖一个一了百了的解决方案。

为了适应一下以后不用unp的开发环境,我还是选择了第二条路,首先是找出了源代码用到的unp.h之中的宏定义,添加到了文件开头,然后改掉了源代码中使用的包裹函数,即把大写的Socket等函数改回socket。

         完成了这些改动之后果然编译成功了,这件事做起来真的也不算难啊。生成程序时发现sctp_sengmsg等函数没有定义,光有声明,估计是在动态库中,我搜索了/usr/lib文件,果然找到了libsctp.so文件,编译时添加-lsctp之后成功。

 

         然后运行时,出了一个意想不到的问题,我发送过去的消息正确,但是stream的序号不对,服务器回送的消息的stream总是0号。最开始以为是sctp_sengmsg或者sctp_recvmsg中的参数写错了位置,毕竟这个函数接口太多。仔细检查之后却发现没问题。找来随书附带的代码运行却没有问题。打算使用gdb调试却发现忘了怎么用了。。还是得有机会回去仔细学习gdb调试方法啊。。。

         然后呢,就在代码之中添加printf函数输出中间的变量结果,最后发现是我把给stream幅值的语句里的’=’写成了’-’号。真是无奈了,这个错误找了两个小时。。。

         键盘上的的减号与等于号确实是挨着的,由于代码敲多了之后速度很快,对自己的编码又过于自信,结果出来了一个意想不到的错误。。

         以后检查代码需要加上新的检查内容了,检查’=’。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值