Что такое значение FIONBIO для iOS, чтобы блокировать / разблокировать сокеты? - PullRequest
0 голосов
/ 29 октября 2019

Я работал с кроссплатформенным клиентом Websocket, основанным на компоненте Indy TIdHTTP, нашел здесь .

Клиент, TIdHTTPWebSocketClient, внутренне использует TIdWebSocketMultiReadThread;последний создает неблокирующий сокет (метод InitSpecialEventSocket), используя GSyck IOControl от Indy для доступа к ioctl.

Код, загруженный с github, работает для Windows, но не работает на Android;FIONBIO пришлось изменить на $ 5421 .

. В настоящее время я не могу тестировать на iOS и хочу узнать, удалось ли другим получить TIdHTTPWebSocketClient для работы на этой платформе, и какое значениеFIONBIO следует использовать.

Заранее спасибо.

1 Ответ

2 голосов
/ 29 октября 2019

FIONBIO применяется к ioctlsocket() в Windows и ioctl() в POSIX.

В POSIX вы можете альтернативно указать флаг SOCK_NONBLOCK при создании сокета или установить флаг O_NONBLOCKв сокете с использованием fcntl(F_SETFL).

Обратите внимание, что Indy имеет параметр AOverlapped (неблокирующий) для методов TIdStack.NewSocketHandle() и TIdStackBSDBase.WSSocket() и метод TIdStackBSDBase.SetBlocking(), но онив настоящее время не реализовано для платформ, отличных от Windows (код для них был написан, но не был зарегистрирован).

...