UNIX网络编程中第一个例子中的问题

本文详细记录了在CentOs7环境下遇到的./configure权限及编译错误的解决方案,包括修改inet_ntop宏定义、添加if_dl.h头文件至/usr/include/net,以及开启本地服务器daytime功能的具体步骤。

执行./configure 报错没有权限

换为 bash ./configure

cd libfree后make报错

vi或vim 进入inet_ntop 添加 #define

cd libroute后make报错没有那个文件或目录

作者说是只有系统支持4.4 BSD风格的routing socket
Linux可以忽略
网上有说添加 if_dl.h到/usr/include/net文件可以make
我是CentOs7的版本 加入后还是报错
报错内容 :
get_rtaddrs.c:13:42: 错误:‘struct sockaddr’没有名为‘sa_len’的成员
附上if_dl.h

#ifndef __NET_IF_DL_H
#define __NET_IF_DL_H
#ifndef __SYS_W32API_H
//#include <sys/w32api.h> w32api 加上会报错
#endif
#ifndef __SYS_CDEFS_H
#include <sys/cdefs.h>
#endif
struct sockaddr_dl {
u_char sdl_len;
u_char sdl_family;
u_int16_t sdl_index;
u_char sdl_type;
u_char sdl_nlen;
u_char sdl_alen;
u_char sdl_slen;
char sdl_data[12];
};
#define LLADDR(s) ((caddr_t)((s)->sdl_data + (s)->sdl_nlen))
__BEGIN_DECLS
W32_FUNC void link_addr (const char *,struct sockaddr_dl *);
W32_FUNC char * link_ntoa (const struct sockaddr_dl *);
_END_DECLS
#endif

加上大佬的if_dl.h

/*

  • Copyright © 1990, 1993
  • The Regents of the University of California. All rights reserved.
  • Redistribution and use in source and binary forms, with or without
  • modification, are permitted provided that the following conditions
  • are met:
    1. Redistributions of source code must retain the above copyright
  • notice, this list of conditions and the following disclaimer.
    1. Redistributions in binary form must reproduce the above copyright
  • notice, this list of conditions and the following disclaimer in the
  • documentation and/or other materials provided with the distribution.
    1. All advertising materials mentioning features or use of this software
  • must display the following acknowledgement:
  • This product includes software developed by the University of
  • California, Berkeley and its contributors.
    1. Neither the name of the University nor the names of its contributors
  • may be used to endorse or promote products derived from this software
  • without specific prior written permission.
  • THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS >``AS IS’’ AND
  • ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  • IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  • ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  • FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  • DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  • OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  • HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  • LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  • OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  • SUCH DAMAGE.
  • @(#)if_dl.h 8.1 (Berkeley) 6/10/93
  • $FreeBSD: src/sys/net/if_dl.h,v 1.10 2000/03/01 02:46:25 archie Exp $
    */

#ifndef NET_IF_DL_H
#define NET_IF_DL_H

/*

  • A Link-Level Sockaddr may specify the interface in one of two
  • ways: either by means of a system-provided index number (computed
  • anew and possibly differently on every reboot), or by a human-readable
  • string such as “il0” (for managerial convenience).
  • Census taking actions, such as something akin to SIOCGCONF would return
  • both the index and the human name.
  • High volume transactions (such as giving a link-level ``from’’ address
  • in a recvfrom or recvmsg call) may be likely only to provide the indexed
  • form, (which requires fewer copy operations and less space).
  • The form and interpretation of the link-level address is purely a matter
  • of convention between the device driver and its consumers; however, it is
  • expected that all drivers for an interface of a given if_type will agree.
    */

/*

  • Structure of a Link-Level sockaddr:
    /
    struct sockaddr_dl {
    u_char sdl_len; /
    Total length of sockaddr /
    u_char sdl_family; /
    AF_LINK /
    u_short sdl_index; /
    if != 0, system given index for interface /
    u_char sdl_type; /
    interface type /
    u_char sdl_nlen; /
    interface name length, no trailing 0 reqd. /
    u_char sdl_alen; /
    link level address length /
    u_char sdl_slen; /
    link layer selector length /
    char sdl_data[12]; /
    minimum work area, can be larger;
    contains both if name and ll address /
    u_short sdl_rcf; /
    source routing control /
    u_short sdl_route[16]; /
    source routing information */
    };

#define LLADDR(s) ((caddr_t)((s)->sdl_data + (s)->sdl_nlen))

#ifndef _KERNEL

#include <sys/cdefs.h>

__BEGIN_DECLS
void link_addr __P((const char *, struct sockaddr_dl *));
char *link_ntoa __P((const struct sockaddr_dl *));
__END_DECLS

#endif /* !_KERNEL */

#endif

执行./daytimetcpcli 127.0.0.1报错connect error: Connection refused

需要打开本地服务器的daytime 功能,操作过程如下:

在daytime-stream中把disable改成 no 的属性。

su
yum install xinetd
vim /etc/xinetd.d/daytime-stream

再重启xinetd即可

service xinetd restart
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值