读书人

Linux socket网络的select函数,该如何

发布时间: 2013-06-26 14:29:32 作者: rapoo

Linux socket网络的select函数
1.关于有数据可写:是socket处于空闲状态,即没有数据发送和接收,也没有错误发送,都表示有数据可读?
2.关于错误:这个错误是指哪些?能够通过这个错误判定客户端已经断开吗?
3.如果数据可写如1所述,那么在空闲状态下,超时时间不是都没用了? socket select
[解决办法]
tcp socket 读缓存和写缓存 有个 SO_RCVLOWAT/SO_SNDLOWAT 接收/发送低潮值
比如读的时候,设置一个低潮值SO_RCVLOWAT 20字节,那么会在缓存>=20 的时候触发select改变(内核)
这个值默认为1
错误类型有很多,视情况而定,可以判断是否断开
那个select 超时 是到时间返回
[解决办法]
建议先学会使用抓包软件,比如wireshark
[解决办法]
1.关于有数据可写:是socket处于空闲状态,即没有数据发送和接收,也没有错误发送,都表示有数据可读?

只要socket的内核写缓冲区未满,写事件将持续触发。

2.关于错误:这个错误是指哪些?能够通过这个错误判定客户端已经断开吗?

经常发生,一般发生在对方关闭了读,而你继续向对端写,导致对端返回RST,本端协议栈可以感知连接断开异常,从而触发select的错误事件。

3.如果数据可写如1所述,那么在空闲状态下,超时时间不是都没用了?

见1.

读书人网 >C语言

热点推荐