使用select可以確定是否有任何字節可以被接收或發送而沒有阻塞。確定可以使用winsock(FIONWRITE)發送多少個字節?
有了這個功能,我能確定有多少字節可接收:
function BytesAvailable(S: TSocket): Integer;
begin
if ioctlsocket(S, FIONREAD, Result) = SOCKET_ERROR then
Result := -1;
end;
有也是一種方式,以確定有多少字節可以發送?因此我可以確定當我使用N個字節發送數據時,它將返回恰好N個字節(或SOCKET_ERROR)但不少於(發送緩衝區已滿)。
FIONWRITE不適用於Winsock。
我讀過幾篇指南,指出「嚴重的應用程序使用非阻塞IO」,因爲文檔模糊不清,阻塞行爲和可移植性差,即使文檔存在。 – Gene