Linux 网络基础和Socket

来源:互联网 发布:solaris和linux的区别 编辑:程序博客网 时间:2024/06/04 01:25

一、TCP/ IP 协议

1、TCP/IP 协议是互联网基础

2、OSI 参考模型与TCP/IP 参考模型

              

 

二、套接字的分类

(1)、流式套接字(SOCK_STREAM)

流式的套接字可以提供可靠的、面向连接的通讯流。它使用了TCP协议。TCP 保证了数据传输的正确性和顺序性。

(2)、数据报套接字(SOCK_DGRAM)

数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。使用数据报协议UDP协议。

(3)、原始套接字

原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议实现的测试等。

 

三、基于流式套接字的编程流程

             

四、IO 模式

有5种IO 模式:阻塞I/O,非阻塞I/O,I/O复用(select和poll),信号驱动I/O,异步I/O

五、select函数

       select函数:这个函数允许进程指示内核等待多个事件中的任一个发生,并仅在一个或多个事件发生或经过某指定的时间后才唤醒进程。
       •包含头文件<sys/select.h><sys/socket.h>
       •功能:提供了即时响应多个套接的读写事件
       •原型: int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *except,conststructtimeval *timeout);
       •参数
         –maxfdp1:等待最大套接字值加1
         –readset:要检查读事件的容器
         –writeset:要检查写事件的容器
         –timeout:超时时间
       •返回值:返回触发套件接字的个数

       structtimeval{

            longtv_sec//

            longtv_usec;//微秒

        };

      •timeout参数有三种可能
        –永远等待下去:仅在有一个描述字准备好I/O时才返回,为此,我们将timeout设置为空指针
        –等待固定时间:在有一个描述字准备好I/O是返回,但不超过由timeout参数所指timeval结构中指定的秒数和微秒数

        –根本不等待:检查描述字后立即返回,这称为轮询。定时器的值必须为0

六、poll 模型

      •包含头文件<poll.h>
      •功能:与select函数功能相同
      •原型: int poll(struct pollfd *fdarray,unsigned long nfds,int timeout);
      •参数
         –fdarray是一个pollfd的机构体数组用来表示表示文件描述符的监视信息
         –nfds参数给出了要监视的描述符数目
         –timeout参数是一个用豪秒表示的时间,poll在返回前没有接收事件是应等待的时间,如果timeout的值为-1,poll就永远不会超时.如果整数值为32个比特,那么最大超时周期约为30分钟
      •返回值:准备好描述字的个数,0-超时,1-出错
      •fd是文件描述符值
      •eventrevents是通过代表各种事件的标准符进行逻辑或运算构建而成的
       structpollfd

       {

           intfd;

           short events;  //感兴趣的事件

           shortrevents; //fd上触发的事情

        }

      

 

 

 

 

 

0 0
原创粉丝点击