Delphi TIdTCPConnection.ReadFromStack - 使用套接字绑定从协议堆栈读取数据。
Delphi TIdTCPConnection.ReadFromStack - 使用套接字绑定从协议堆栈读取数据。
function TIdTCPConnection.ReadFromStack(
const ARaiseExceptionIfDisconnected: Boolean = True; //断开连接时引发异常。默认值为True。
ATimeout: Integer = IdTimeoutDefault; //等待可读取套接字句柄的超时值。默认值为IdTimeoutDefault。
const ARaiseExceptionOnTimeout: Boolean = True //发生超时时引发异常。默认值为True。
): Integer;
返回值: Integer—从协议堆栈读取的字节数。
描述:
- ReadFromStack是一个整型函数,用于将对等连接的IP协议堆栈中的数据读取到为该连接维护的Indy缓冲区中。
- ATimeout表示在读取数据之前等待IOHandler变为可读的毫秒数。当ATimeout包含值IdTimeoutDefault时,ReadTimeout将在非零时用作超时值。否则,IdTimeoutInfinite将用作超时值。如果发生超时,当ARaiseExceptionOnTimeout为True时,将引发EIdReadTimeout异常。否则ReadFromStack不执行其他处理,并使用-1作为方法的返回值。
- ReadFromStack使用ARaiseExceptionIfDisconnected中指定的值调用CheckForDisconnect,以确定连接关闭时是否引发异常。如果套接字未连接,ReadFromStack将退出该方法。
- ReadFromStack使用IOHandler确定连接何时可读,并从输入源接收数据。ReadFromStack更新ClosedGracefully,指示在关闭连接之前从堆栈中读取所有数据的时间,并调用TIdStack。CheckForSocketError以确定连接是否异常关闭。
- 当ClosedGracefully为False时,协议堆栈用于检查Id_WSAESHUTDOWN错误,并允许套接字在检测到错误时断开连接。如果Indy读取缓冲区不包含未读数据,则使用协议堆栈处理程序重新引发Id_WSAESHUTDOWN异常。
- ReadFromStack通过在启用时调用Intercept的Receive处理程序来支持TIdConnectionIntercept。当ASCIIFilter为True时,ReadFromStack还执行8位到7位字符转换。
- 最后,ReadFromStack将从输入源读取的数据移动到内部Indy缓冲区,并将返回值设置为操作处理的字节数。
- 由于网络争用和阻塞套接字的性质,ReadFromStack可能是一个时间密集型操作。ReadFromStack应该是从协议堆栈读取数据的唯一位置。
创建时间:2022.11.22 更新时间:
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!