nyr*_*yrl 5 c++ nonblocking send
我正在使用 SOCK_SEQPACKET 连接,确保通过单个 write()/send() 调用发送整个缓冲区对我来说至关重要。我还使用设备驱动程序,该驱动程序旨在通过单个调用处理完整的数据块。同时我想处理 write()/send() 由于缓冲区溢出而阻塞的情况,即我想得到一个反馈,即当前的实现是否在这里遇到瓶颈。我正在使用 glibc,Linux 2.6。
我需要实现一个接受缓冲区的方法,它要么完全发送缓冲区,要么指示由于阻塞(即系统缓冲区溢出)而失败。
看起来使用 send(..., MSG_DONTWAIT)/fcntl(..., O_NONBLOCK) 不是解决方案,因为它们在报告 EWOULDBLOCK/EAGAIN 之前接受部分写入。有没有办法检查传出缓冲区中是否有足够的空间,或者是否有专用的写入完成或失败方法?
或者,是否可以通过其他方式检测块?例如,定时器+信号似乎是一个选项,但我不喜欢为每次写入设置它的想法。
先感谢您。