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 では使用できません。