首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

socket接口api的深度探究

一、socket接口使用 1.1 socket抽象层 Linux内核net/socket.c定义了一套socket的操作api。图1展示了socket层所处与TCP/IP协议栈之上和应用层之下。...注意:除了accpet,还有accept4(为什么叫4,因为有4个形参)比accept多了一个参数,可以传flag到系统调用。...可以看到两者的区别仅仅在于accept4()有第四个参数flags,这个参数如果为0,就跟accept()一样;下面的两个参数可以用按位OR来获取不同的行为。...而使用accept4()就可以直接在打开的文件描述符上设置,可以消除竞争的问题。...(原则上该竞争在那些新建文件描述符的调用中都存在,所以很多linux的系统调用都做了类似的处理) image.png 1.3.6 send/write函数 功能:发送数据 实现:验证socket和connection

2.7K370

Linux源码看Socket(TCP)的accept

今天笔者就从Linux源码的角度看下Server端的Socket在进行Accept的时候到底做了哪些事情(基于Linux 3.10内核)。...还有个accept扩展accept4: // 额外添加的flags参数可以为新连接描述符设置O_NONBLOCK|O_CLOEXEC(执行exec后关闭)这两个标记 int accept4(int sockfd...理解accept的关键点是,它会创建一个新的Socket,这个新的Socket来与对端运行connect()的对等Socket进行连接,如下图所示: 接下来,我们就进入Linux内核源码栈吧 accept...关于epoll的原理可以看下笔者之前的博客《从linux源码看epoll》: https://www.cnblogs.com/alchemystar/p/13161781.html 在这里描述一下原因,...为了解决这一问题,Linux提供了so_reuseport这个参数,其原理如下图所示: 多个fd监听同一个端口号,在内核中做负载均衡(Sharding),将accept的任务分散到不同的线程的不同

1.8K00

IO 模型知多少 | 代码篇

对于Linux系统来说,我们可以借助strace命令来跟踪指定应用发起的系统调用和信号。...验证同步阻塞I/O发起的系统调用 可以使用VSCode Remote 连接到自己的Linux系统上,然后新建项目Io.Demo,以上面非阻塞IO的代码进行测试,执行以下启动跟踪命令: shengjie@...Since Linux 2.6.8, the size argument is ignored, but must be greater than zero; see NOTES below...总结 写完这篇文章,对I/O模型的理解有所加深,但由于对Linux系统的了解不深,所以难免有纰漏之处,大家多多指教。 同时也不仅感叹Linux的强大之处,一切皆文件的设计思想,让一切都有迹可循。...现在.NET 已经完全实现跨平台了,那么Linux操作系统大家就有必要熟悉起来了。

71020
领券