![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux套接字编程
文章平均质量分 55
wayne_l123
互联网从业者
展开
-
linux下原始ip数据包包头(tcp头、udp头)的获取和分析
前言 在有些时候我们需要直接抓取并分析原始ip数据包(比如说netfilter内核框架中数据包的分析、原始套接字中数据包的分析),但是我们所能获得的ip数据包通常只是一个若干字节的在连续地址空间中存储的数据,比如存在数组char[MSG_SIZE]中,下面介绍如何分析原始ip数据包中的数据。 在开始分析包头之前我们假设原始ip数据包存储在缓存char buf[MSG_S原创 2014-05-15 20:25:01 · 9515 阅读 · 0 评论 -
linux套接字通信之recv中的缓存机制的研究
以前一直有这么一个小小的疑惑,当一个进程注册一个套接字后,那么这个进程每次调用recv系函数接收数据的时候,接收的是执行recv期间收到的数据还是一定时期内收到的数据? 或者这样说,如果我的程序收到一个数据包后需要很长一段时间处理,然而在某段时间又突然有一大批包在很短的时间内发过来(短过数据包的处理时间),那我的程序会不会漏过某些数据包(那个包到达的时候程序在处理别的包,而没有调用recv函数)?原创 2014-06-04 10:48:23 · 858 阅读 · 0 评论 -
linux中epoll模型的总结
一、前言 epoll是Linux下的一种IO多路复用技术。简单的说就是可以实现对多个文件描述符的管理和操作,比如说同时监听多个套接字。epoll的功能跟select很像,但是又能够解决select在大规模并发网络应用场景下效率低下的问题,绝对是大型网络程序(Http服务器)的利器。二、epoll的特点 为了凸显epoll的特点,先来讲一下select原创 2014-06-22 19:44:33 · 827 阅读 · 0 评论 -
linux套接字通信之recv中的缓存机制的研究
以前一直有这么一个小小的疑惑,当一个进程注册一个套接字后,如果这个套接字没有被调用recv函数接受数据包,那么这个套接字能接受到数据包吗? 或者这样说,如果我的程序注册了一个套接字去接受数据包,但是每收到一个数据包都需要很长一段时间处理,并且在处理数据包的途中recv函数使没有被调用的,那么如果程序再处理数据包的途中有数据包到来,那我的程序会不会漏过这些数据包(那个包到达的时候程序在处理别的包,而原创 2014-07-13 17:29:47 · 1601 阅读 · 0 评论 -
利用sendmsg和recvmsg来指定发送接口或者获取接收数据接口
前言 sendmsg和recvmsg函数是一对相对下层的套接字发送、接受函数。通过这对函数,我们可以设置或者取得数据包的一些额外的控制信息,这些信息中比较常用的就是本文要介绍的发送、接受接口信息。通过这对函数,我们可以指定一个数据包发送的时候使用的接口(网卡)或者获得一个接受到数据包的来源接口。sendmsg函数使用sendmsg(fd, &mhdr, 0)函数中最重要的就是ms原创 2014-07-13 19:33:22 · 3705 阅读 · 0 评论 -
epoll所属IO模型的个人 见解
最近在学习IO模型,就突然想到了epoll属于哪个IO模型这个问题。要研究这个问题,我们首先要知道有哪些常用的IO模型。常见的IO模型如下:阻塞IO:程序阻塞直到IO可用。最简单的IO模型,你平时调用的recvfrom接收函数就属于这个模型。非阻塞IO:程序调用IO函数后立刻返回,无论当前IO可用不可用。如果你把套接字设置成了非阻塞模式,那么你使用的就是这个模型了。复用IO:程序阻原创 2014-08-16 13:53:30 · 2593 阅读 · 0 评论