linux网络编程函数,Linux网络编程笔记(一)基本函数和工具

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

常用变量类型

宏BUFSIZ为系统默认的缓冲区大小,也是stdio.h中的一个宏定义,默认8092。

结构体sockaddr_in:

83acfb3eff1221e4a470e6da0de9e3ee.png

常用函数

inet_addr函数与inet_ntoa函数

头文档:#include

inet_addr:该函数用于将 点分十进制IP地址 转换成 网络字节序IP地址。

原型:in_addr_t inet_addr(const char *cp);

返回值:如果正确执行,将返回一个无符号长整数型数;如果传入的字符串不是一个合法的IP地址,将返回 INADDR_NONE。

inet_ntoa功能:该函数用于将网络字节序IP 转化为 点分十进制IP地址。

原型:char *inet_ntoa (struct in_addr);

返回值:如果正确执行,将返回一个字符指针;否则,返回 NULL。

ntohs与htons函数

头文档:#include

ntohs功能:转换端口,将网络字节顺序转换为主机字节顺序;network to host short。

原型:uint16_t ntohs(uint16_t netshort);

htons功能:转换端口,将主机字节顺序转换为网络字节顺序;network to host short。

原型:uint16_t htons(uint16_t netshort);

大端小端是由CPU决定的,与操作系统无关。由于网络字节序是大端,如果主机字节序也是大端,那么不处理,返回原参数即可。如果主机是小端,那么转为大端,例如端口为37,uint16_t类型时2字节,转为二进制就是0000 0000 0010 0101,转为大端时应该交换这2字节,也就是变成0010 0101 0000 0000,即十进制的9472。

看Linux对这两个函数的源码:

96227905c04d37edeeced21846a266b8.png

可以发现主机为小端时,ntohs和htons是相同的,也就是结果一样,因为参数只有2字节,反正都是交换这两个字节,所以主机-网络和网络-主机都是用这两个函数,只是从字面上不太容易理解。

如果为大端,实际是不处理,这里的宏定义看不出来。

bzero函数

原型:extern void bzero(void *s, int n);

头文档:#include

功能:置字节字符串s的前n个字节为零且包括‘ ’。1

2

3char p[7] = "abcd";

bzero(p,3);

printf("p: %sn",p);//空白

错误处理函数

函数perror()用来将上一个函数发生错误的原因输出到标准错误(stderr),参数s 所指的字符串会先打印出,后面再加上错误原因 字符串。此错误原因依照全局变量 errno 的值来决定要输出的字符串。

函数char *strerror(int errno)将错误代码转换为字符串错误信息。全局变量errno在中定义。

常用的方法:1

2

3

4

5ret = connect(cfd,(struct sockaddr*)&ser_addr, sizeof(ser_addr));

if(ret==-1)

{

perror(strerror(errno));//输出详细错误信息

}

exit函数

用来退出进程,参数为0表示正常退出,否则表示有错误而退出

常用工具

netstat查看结果:

1704c267510f4dae1170305e8a34ea01.png

off是计时器状态,表示当前socket没有timer。后面的(0.00/0/0)是时间,因为当前为off,所以都是0

ea3ca543fd2c42132db58ad3ba6d974e.png

7914a0322b9d26620ebb8ff610ea8155.png

27c8f0c1fcaa225a9550c2fd22b89e3d.png

Linux中查看socket状态:cat /proc/net/sockstat(用于ipv4)

sockets: used 137 TCP: inuse 49 orphan 0 tw 3272 alloc 52 mem 46UDP: inuse 1 mem 0RAW: inuse 0 FRAG: inuse 0 memory 0

说明:

sockets: used:已使用的所有协议套接字总量

TCP: inuse:正在使用(正在侦听)的TCP套接字数量。其值≤ netstat –lnt | grep ^tcp | wc –l

TCP: orphan:无主(不属于任何进程)的TCP连接数(无用、待销毁的TCP socket数)

TCP: tw:等待关闭的TCP连接数。其值等于netstat –ant | grep TIME_WAIT | wc –l

TCP:alloc(allocated):已分配(已建立、已申请到sk_buff)的TCP套接字数量。其值等于netstat –ant | grep ^tcp | wc –l

TCP:mem:套接字缓冲区使用量(单位不详。用scp实测,速度在4803.9kB/s时:其值=11,netstat –ant 中相应的22端口的Recv-Q=0,Send-Q≈400)

UDP:inuse:正在使用的UDP套接字数量

RAW:

FRAG:使用的IP段数量

IPv6请看:cat /proc/net/sockstat6

TCP6: inuse 3UDP6: inuse 0RAW6: inuse 0 FRAG6: inuse 0 memory 0

通过这些值,可以很容易计算出当前的tcp请求数,然后做相关的监控。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值