使用 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。