Какие события запускаются для блокирующего сокета?

Из любопытства, какие события в 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 в режиме блокировки, чтобы обнаружить эти состояния сокета.

Другие вопросы по тегам