TCP/IP Illustrated Episode 2

安装好FreeBSD,继续编译剩下的代码。

1、链接
http://www.kohala.com/start/tcpipiv1.tar.Z

2、解压缩

3、makefile需要修改

# Following line for SVR4, Solaris 2.x
#LIBS	= /usr/ucblib/libucb.a -lsocket -lnsl 注释掉

# Following line for 4.4BSD, BSD/386, SunOS 4.x, AIX 3.2.2
LIBS	= #取消注释

4、sock下的strerror.c文件需要修改

extern char	*sys_errlist[];
extern int	sys_nerr;

改为

extern const char	* const sys_errlist[];
extern const int	sys_nerr;

然后就可以编译了。

Openindiana

makefile需要修改

# Following line for SVR4, Solaris 2.x
#LIBS	= /usr/ucblib/libucb.a -lsocket -lnsl 注释掉

# Following line for 4.4BSD, BSD/386, SunOS 4.x, AIX 3.2.2
LIBS	= -lsocket -lnsl

但是socket文件夹下会有问题,提示:

error: structure has no member named `msg_control'
error: structure has no member named `msg_controllen'
error: structure has no member named `msg_flags'

原因如下:

4.3BSD

不幸,对于4.3BSD以及在其基础上构造的SunOS和Ultrix,以及从4.3BSD Reno开始的后续版本我们必须提供不同的实现。为了交换文件描述符,调用sendmsg(2)和recvmsg(2)函数。这两个函数的参数中都有一个指向msghdr的指针,该结构包含了所有关于要发送和接收消息的信息。该结构定义在<sys/socket.h> 头文件中,在BSD4.3之下,其样式是:

strcut msghdr {  
	caddr_t  msg_name;    可选的地址  
	int   msg_namelen;    地址长度  
	struct iovec  msg_iov;     散布/聚集数组  
	int    msg_iovlen;    在msg_iov数组中的元素数  
	caddr_t  msg_accrights;    存取权发送/接收到  
	int    msg_accrightslen;   存取权缓存的长度  
}  

从4.3BSD Reno开始,更改了msghdr结构的定义。在以前版本中被称之为"存取权" 的最后两个元素改称为"辅助数据"。另外,在该结构结束处增加了一个新成员msg_flags。

strcut msghdr {  
	caddr_t  msg_name;    可选的地址  
	int   msg_namelen;    地址长度  
	struct iovec  msg_iov;     散布/聚集数组  
	int    msg_iovlen;    在msg_iov数组中的元素数  
	caddr_t  msg_control;    辅助数据  
	int    msg-controllen;   辅助数据的长度  
	int    msg_flags;    接收到消息的标志  
}

在CFLAGS一行加上

-D_XOPEN_SOURCE=500 -D__EXTENSIONS__
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值