【发布时间】:2012-10-03 05:18:49
【问题描述】:
使用 select 我可以确定是否可以在不阻塞的情况下接收或发送任何字节。
通过这个函数,我可以确定可以接收多少字节:
function BytesAvailable(S: TSocket): Integer;
begin
if ioctlsocket(S, FIONREAD, Result) = SOCKET_ERROR then
Result := -1;
end;
还有没有办法确定可以发送多少字节?
所以我可以肯定,当我用 N 个字节调用 send 时,它会返回正好发送的 N 个字节(或 SOCKET_ERROR),但不会更少(发送缓冲区已满)。
FIONWRITE 不适用于 Winsock。
【问题讨论】:
-
我读过几本指南说“严重的应用程序使用非阻塞 IO”,因为文档中关于阻塞行为的内容含糊不清,而且即使文档在那里,移植性也很差。