套接口基本操作

来源:互联网 发布:android php 编辑:程序博客网 时间:2024/04/30 02:04

阻塞TCP套接口读操作:从内核发送缓冲区中读到数据就返回,有可能是单个字节。如果什么数据也没有,则阻塞在那里等待数据,除非对方关闭连接。

阻塞TCP套接口写操作:写操作会将数据从应用缓冲区拷贝到内核缓冲区,如果内核缓冲区满了,则阻塞。写操作返回了并不代表对方已经收到数据了,仅仅是表示数据拷贝进了内核缓冲区,可能还没有发送。

非阻塞TCP套接口读操作:没有数据可读,立刻返回。

非阻塞TCP套接口写操作:发送缓冲区满,则立即返回。发送缓冲区还有部分空,则拷贝部分数据,写操作的返回值就是拷贝进缓冲区的数据。

阻塞UDP套接口读操作:阻塞在那里,直到读到某个数据报。读缓冲区的分配长度要比期望收到的数据报的最大长度加1,这样如果收到长度等于缓冲区的数据报,则认为接收到了过大的数据报,直接丢弃。

UDP套接口没有真正的写缓冲区,发送的时候只是不同的协议层加上相应的头部,一般阻塞方式写操作不会阻塞,阻塞住了则是因为其他原因。

 

select函数的可读、可写、异常,三个参数只赋值一个。select返回即可读又可写,则表示套接口出错。返回-1表示错误,有可能是被信号中断了。

 

select函数可读描述字就绪条件:

a. 接收缓冲区中可读数据大于等于接收缓冲区的低潮标识--默认是1。也就是说一般TCP套接口,只要缓冲区中有数据可读就返回。UDP套接口,只要有数据报可读就返回。

 

select函数可写描述字就绪条件:

a.TCP套接口发送缓冲区中空闲的空间大于发送缓冲区的低潮标志-默认1024,也就是说,阻塞套接口select可写,一般仅仅表示发送缓冲区中有1024字节空闲,如果发送的数据大于1024,则还是可能会阻塞。如果该套接口不需要连接,也就是说UDP套接口select总是可写。

原创粉丝点击