编程语言 如何通过原始套接字修改IP数据包头 背景:我们的设备上有个链路探测的功能,会定时请求公网的某个IP地址,以探测网络是不是连通的。具体的做法是会使用icmp或dns探测远端服务器,看请求能否正常响应,如果有响应,则认为链路正常,否则则认为... 06月05日评论 阅读全文
C/C++ 服务端的socket如何知道客户端是通过什么IP地址连接过来的 问题场景:服务器有多个网卡,分别绑定了地址A、地址B和地址C,当客户端连接请求过来的时候,如何知道是从哪个IP地址请求过来的? 解决方案:服务端accept客户端的连接后,对这个新接受的socket进... 05月09日评论 阅读全文
C/C++ 给socket分配随机端口 客户端的socket不需要手动执行bind绑定地址,但这不意味着客户端socket真的不需要绑定端口,实际上是内核它帮我们做了这个操作,在执行connect时,内核发现没有绑定端口,就会自动选择一个合... 04月25日评论 阅读全文
编程语言 I/O模型 一、I/O模型分类 unix环境下有5中IO模型: 阻塞式I/O 非阻塞式I/O I/O多路复用 信号驱动I/O 异步I/O(POSIX中的aio_系列函数) 常用的是前三种方式,特别是多路I/O复用... 02月29日评论 阅读全文
C/C++ epoll中的边缘触发ET和水平触发LT模式 epoll中的触发模式有两种,边缘触发和水平触发,默认情况下使用的是水平触发。 边缘触发(ET)的意思是当电平出现变化的时候才触发事件,如果设置了边缘触发,执行epoll_wait时,内核检测到数据到... 02月26日评论 阅读全文