我有一个使用以下代码创建的BSD套接字(它在外部库中,我无法更改):
fcntl(sock, F_SETFL, O_NONBLOCK);
connect(sock, (struct sockaddr*) &sin, sizeof(sin))
我可以做些什么来从Cocoa获得建立连接的通知?在常规世界中,我会选择(3)并测试可写性,但这会阻塞或需要轮询(或者我需要一个线程)
我尝试使用NSFileFandle
,但这只允许我测试是否有新数据可用,而不是该连接已准备好写入。
答案 0 :(得分:1)
我也没有在Cocoa示例和文档中看到这样的机制。
但问题是,我也没有看到可用于在Cocoa中创建这种机制的内核机制。如果没有内核支持,即使有办法从某个高级框架获取异步连接通知,它也不会比你提出的更有效,在一个线程中调用select()。
您可以稍微改进一下这个想法,例如使用kqueue()而不是select(),并将所有应用程序的文件句柄和套接字描述符汇集在一起,这样就不需要每个线程。