Какие события запускаются для блокирующего сокета?
Из любопытства, какие события в TServerSocket/TClientSocket запускаются, если это тип ThreadBlocking?
1 ответ
TClientSocket
в режиме блокировки запускаются все его события, кроме OnRead
а также OnWrite
, Так же OnDisconnect
Событие не вызывается при удаленном отключении, только когда клиент закрывает свой собственный конец сокета. Ответственность за обнаружение этих состояний сокетов лежит на коде, который читает / записывает данные. Читаемость определяется через TWinSocketStream.WaitForRead()
или WinSock select()
функция. Пишемость обнаруживается через WinSock select()
только функция Удаленное разъединение обнаруживается сначала обнаружением читаемости, а затем TCustomWinSocket.ReceiveBuf()
или же TWinSocketStream.Read()
возвращая 0.
TServerSocket
в режиме блокировки запускаются все его события по умолчанию. Однако, если вы извлекаете класс из TServerClientThread
который перекрывает виртуальный ClientExecute()
метод, а затем вернуть экземпляр этого класса из OnGetThread
событие, то вы теряете OnRead
а также OnWrite
события и должны использовать аналогичную логику для TClientSocket
в режиме блокировки, чтобы обнаружить эти состояния сокета.