ping源码代阅读(二) 基本知识介绍

我们先把在ping代码中的需要的知识学习下,然后我们在阅读代码部分只需要把流程讲清楚就可以了。

网络程序之间的连接需要五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。

结合上篇中的流程图,把用到的api介绍下。

A.int socket(int domain, int type, int protocol);

icmp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);用来建立一个新的socket,也就是向系统注册,通知系统建立一通信端口。

1.domain协议族

AF_INET:等同于PF_INET,(Internet协议族,也就是TCP/IP)

2.type

SOCK_STREAM:流式套接字,面向连接和可靠的通信类型

SOCK_DGRAM:数据套接字,非面向连接和不可靠的通信类型

SOCK_RAW:原始套接字,用来直接访问IP协议

3. IPPROTO_ICMP

这里指定了通信协议,我们可以通过返回值套接字号可进行下一步操作。

B.int bind(int socket, struct sockaddr *my_addr, int addrlen);

bind(icmp_sock, (struct sockaddr*)&source, sizeof(source))

将套接口和机器上一定的端口号绑定在一起.包括了本机地址和本地端口地址。

struct sockaddr_in{  
short sin_family; /*AF_INET*/  
u_short sin_port; /*16位端口号,网络字节顺序*/  
struct in_addr sin_addr; /*32位IP地址,网络字节顺序*/  
char sin_zero[8]; /*保留*/  
}

C.  int connect(int sockfd, struct sockaddr *serv_addr,int addrlen);

serv_addr是包含远端主机IP地址和端口号的指针;

D. int setsockopt ( int sockfd, int level, int optname, const void * optval, socklen_t *opteln )

lever:类型

IPPROTO_IP:IPv4套接口
optname:选项名称
optval(选项值):指向变量的指针。

E.int recvmsg(int sockfd, struct msghdr *msg, int flags);

cc = recvmsg(icmp_sock, &msg, polling);   

用来接收远程主机经指定的socket传来的数据。参数s为已建立好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据结构内容,参数flags一般设0

主要的函数只有这几个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值