socket done

本文介绍了C++中inet_ntoa函数的工作原理,揭示了其在静态区分配内存的特点,以及由此带来的线程安全问题。同时,深入解析了socket在网络编程中的角色,指出socket本质上是文件,通过file结构体和socket结构体相互关联,形成从底层到上层的数据管理结构。
摘要由CSDN通过智能技术生成

#include <functional>
typedef std::function<int(int, int)> handler;

C++11定义函数指针。

inet_ntoa

  • inet_ntoa函数用来将整数型的ip地址转换成字符串型的ip。但是这个函数只要求传入一个整数,没有要求传入内存,所以我们不禁好奇,inet_ntoa在哪里开辟的字符串的空间呢?
  • 在静态区。inet_ntoa会在静态区开辟对应的字符串风格的ip,然后传回这个字符串的地址。那么如果多次调用inet_ntoa,后面的ip会覆盖前面的ip。
  • inet_ntoa不是线程安全的。

socket和file

  • 我们在创建套接字时,操作系统会为我们创建一系列的数据结构来管理套接字。那么究竟创建了什么呢?我们来探讨一下。
  • socket也是文件,操作系统先会为我们创建一个file结构体,在该结构体里有一个private_data指针,这个指针指向该文件对应的socket结构体。
  • socket结构体中有一个sk指针,指向sock结构体,这个结构体实际上是一系列结构体的子结构,当我们使用tcp结构体时,直接(tcp_sock*)sk,这样我们就看见了tcp的sock信息。
  • socket结构体中也有一个file指针,指向file结构体,这样就能贯穿底层和上层。

socket内核中和file的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值