随笔分类 - Linux网络编程
摘要:说明 前面从stackoverflow上找了一篇讲这两个选项的文章,文章内容很长,读到最后对Linux中的这两个选项还是有些迷茫,所以重新写一篇文章来做一个总结; 本文只总结TCP单播部分,并且只讨论该选项的bind()系统调用部分,UDP,组播,开启选项之后数据包的调度等不做讨论; man手册中对
阅读全文
摘要:说明 本文下面内容基本上是截取自stackoverflow,针对这两个选项,在另外一篇文章中做了总结,请移步<Linux TCP套接字选项 之 SO_REUSEADDR && SO_REUSEPORT> 原文部分翻译 基本知识点 TCP/UDP连接是由一个五元组(如下)标识的,不允许存在多个连接具有
阅读全文
摘要:listen函数 1 #include <sys/socket.h> 2 3 int listen(int sockfd, int backlog); 4 5 //ret-成功返回0 失败返回-1 listen仅由服务器调用,它做两件事情: (1) 当socket创建一个套接字的时候,它被假设为一个
阅读全文
摘要:1. 原始套接字能力: (1) 进程可以读写ICMP,IGMP等分组,如ping程序; (2) 进程可以读写内核不处理协议字段的ipv4数据报;如OSPF等; (3) 进程可以使用IP_HDRINCL套接字选项自行构造ipv4首部; 2. 原始套接字的创建: 开启ip头构造选项: 当选项开启时,我们
阅读全文
摘要:1. 套接字选项函数原型: 2. 通用套接字选项: (1) SO_BROADCAST: 本选项开启或禁止进程发送广播消息的能力;只有数据报套接字支持广播,并且还必须是在支持广播消息的网络上; (2) SO_DEBUG: 本选项仅由TCP支持。当给一个TCP套接字开启本选项,内核将为TCP在该套接字和
阅读全文
摘要:套接字的默认状态是阻塞的,这就意味着当发出一个不能立即完成的套接字调用时,其进程将被投入睡眠,等待响应操作完成,可能阻塞的套接字调用可分为以下四类: (1) 输入操作,包括read,readv,recv,recvfrom,recvmsg; (2) 输出操作,包括write,writev,send,s
阅读全文
摘要:1. connect出错: (1) 若TCP客户端没有收到syn分节的响应,则返回ETIMEOUT错误;调用connect函数时,内核发送一个syn,若无响应则等待6s后再发送一个,若仍然无响应则等待24s后在发送一个,若总共等待75s后仍未收到响应则返回本错误; (2) 若对客户的syn响应是rs
阅读全文
摘要:1. listen函数: listen仅由服务器调用,它做两件事情: (1) 当socket创建一个套接字的时候,它被假设为一个主动套接字,也就是说,它是一个将调用connect发起连接的客户套接字。listen函数把一个未连接的套接字转换成一个被动套接字,指示内核应该接受指向该套接字的连接请求;调
阅读全文
摘要:1. connect函数: connect函数是把当前套接字从CLOSED状态转移到SYN_SENT状态,若成功则再转移到ESTABLISHED状态。若connect失败则该套接字不再可用,必须关闭,我们不能对这样的套接字再次调用connect函数。当循环调用connect为给定主机尝试各个ip地址
阅读全文
摘要:如网络编程中accept之后等待数据到达,并且读取数据为例: Reactor: 基于同步IO 1. 线程等待读取socket数据,将socketfd添加到事件分派器中,如添加到epoll; 2. 事件分派器阻塞等待socketfd可读事件发生; 3. 若数据到达,socketfd变成可读状态,事件分
阅读全文