阻塞套接字会触发什么事件?

时间:2013-02-19 14:31:52

标签: delphi sockets

出于好奇,如果它是ThreadBlocking类型,会触发TServerSocket / TClientSocket中的哪些事件?

1 个答案:

答案 0 :(得分:4)

阻止模式下的

TClientSocket会触发除OnReadOnWrite之外的所有事件。此外,仅当客户端关闭其自己的套接字端时,才会在远程断开连接上触发OnDisconnect事件。代码负责读取/写入数据以检测这些套接字状态。通过TWinSocketStream.WaitForRead()或WinSock select()功能检测可读性。仅通过WinSock select()函数检测可写性。首先检测可读性,然后TCustomWinSocket.ReceiveBuf()TWinSocketStream.Read()返回0,检测到远程断开连接。

阻止模式下的

TServerSocket默认触发所有事件。但是,如果从TServerClientThread派生一个覆盖虚拟ClientExecute()方法的类,然后从OnGetThread事件返回该类的实例,则会丢失OnReadOnWrite事件,并且必须在阻塞模式下使用与TClientSocket类似的逻辑来检测那些套接字状态。