在Cocoa中测试BSD套接字的可写性

时间:2009-09-19 14:01:49

标签: cocoa asynchronous sockets

我有一个使用以下代码创建的BSD套接字(它在外部库中,我无法更改):

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

我可以做些什么来从Cocoa获得建立连接的通知?在常规世界中,我会选择(3)并测试可写性,但这会阻塞或需要轮询(或者我需要一个线程)

我尝试使用NSFileFandle,但这只允许我测试是否有新数据可用,而不是该连接已准备好写入。

1 个答案:

答案 0 :(得分:1)

我也没有在Cocoa示例和文档中看到这样的机制。

但问题是,我也没有看到可用于在Cocoa中创建这种机制的内核机制。如果没有内核支持,即使有办法从某个高级框架获取异步连接通知,它也不会比你提出的更有效,在一个线程中调用select()。

您可以稍微改进一下这个想法,例如使用kqueue()而不是select(),并将所有应用程序的文件句柄和套接字描述符汇集在一起​​,这样就不需要每个线程。

相关问题