Тестирование на записываемость сокета BSD в Какао - PullRequest
0 голосов
/ 19 сентября 2009

У меня есть сокет BSD, созданный со следующим кодом (он находится во внешней библиотеке, которую я не могу изменить):

fcntl(sock, F_SETFL, O_NONBLOCK);
connect(sock, (struct sockaddr*) &sin, sizeof(sin))

Что я могу сделать, чтобы получить уведомление от Какао, что соединение установлено? В обычном мире я бы сделал select (3) и проверил бы на возможность записи, но это либо блокирует, либо требует опроса (или мне нужен поток)

Я пробовал с NSFileFandle, но это позволяет мне только проверить, есть ли новые данные, а соединение не готово к записи.

1 Ответ

1 голос
/ 19 сентября 2009

Я также не вижу такого механизма в примерах и документах по Какао.

Дело в том, что я также не вижу механизма ядра, который можно было бы использовать для создания такого механизма в Какао. Без поддержки ядра, даже если есть способ получить уведомление об асинхронном соединении от какой-то высокоуровневой среды, он не будет более эффективным, чем вы предлагаете, вызывая select () в потоке.

Вы могли бы несколько уточнить эту идею, например, используя kqueue () вместо select (), и объединяя вместе все дескрипторы файлов приложения и дескрипторы сокетов, так что вам не нужен поток для каждого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...