阻塞套接字会触发哪些事件?

1 sockets delphi

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

Rem*_*eau 5

TClientSocket在阻塞模式下会触发除OnReadand之外的所有事件OnWrite。此外,该OnDisconnect事件不会在远程断开连接时触发,只有在客户端关闭自己的套接字端时才会触发。读取/写入数据以检测这些套接字状态是代码的责任。通过TWinSocketStream.WaitForRead()或 WinSockselect()函数检测可读性。仅通过 WinSockselect()函数检测可写性。远程断开是通过第一检测和可读性-然后,检测TCustomWinSocket.ReceiveBuf()TWinSocketStream.Read()返回0。

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