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 更新时间:
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!
分类:
Delphi C函数/过程
, Delphi 网络
标签:
Delphi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 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 方法