Delphi TIdTCPConnection.ReadFromStack - 使用套接字绑定从协议堆栈读取数据。

Delphi TIdTCPConnection.ReadFromStack - 使用套接字绑定从协议堆栈读取数据。

1
2
3
4
5
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   滔Roy  阅读(357)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
历史上的今天:
2021-11-22 Delphi TDataSet FindField 方法

导航

点击右上角即可分享
微信分享提示