Хотя select()
и pselect()
могут работать для вашего приложения, они очень сильно отличаются от WSAAsyncSelect()
. Эти функции позволяют вам управлять блокировкой в другом неблокирующем сокете или набором сокетов. То же самое касается poll()
.
Асинхронные сокеты Winsock, с другой стороны, никогда не блокируются. Существует также большое количество асинхронных уведомлений, от которых, несомненно, зависит ваш код.
Я не верю, что существуют какие-либо нативные API-интерфейсы на OS X, которые обеспечивают подобное поведение. Тем не менее, можно создать такую вещь. Немного погуглил появился CocoaAsyncSocket .
Если вы предпочитаете не зависеть от сторонних библиотек, я предлагаю создать что-то поверх CFSocket компании Cocoa, как это сделали разработчики CocoaAsyncSocket, если вы будете портировать через программу с графическим интерфейсом, а не перейти к основным функциям, таким как select()
. Есть что-то, что можно сказать об использовании единой среды разработки для всего.
Если вам нужен кроссплатформенный код, библиотека wxWidgets имеет иерархию классов wxSockets *, которая эмулирует асинхронный механизм сокетов Winsock. В целом, wxWidgets структурирован во многом как MFC, что упрощает портирование, если вы знакомы с этим.