套接口基本操作

本文详细介绍了TCP与UDP套接字的操作模式,包括阻塞与非阻塞读写操作的区别,以及select函数的工作原理和其判断套接字可读、可写状态的具体条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

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

 

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

 

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

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

 

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值