socket 读、写、异常事件发生后的条件
1.可读
socket读缓冲区有数据可读
对方的读一半关闭(对方用shutdown关闭读,或者正常调用close关闭掉socket,我们将收到FIN段,读操作会返回0)
如果是监听socket,已完成连接队列不为空时
socket发生一个错误待处理(错误可以通过getsockopt指定SO_ERROR来获取)
2.可写
socket写缓冲区有空闲
对方的写一半关闭(对方不正常挂掉,系统关闭文件描述符,发送一个RST段过来---这时我们可写,写第一次,引发一个RST,写第二次,引发一个SIGPIPE)
socket发生一个错误待处理(错误可以通过getsockopt指定SO_ERROR来获取)
3、异常
有带外数据到来