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  更新时间:

posted on 2022-11-22 08:25  滔Roy  阅读(253)  评论(0编辑  收藏  举报

导航