0

我想打开一个套接字并在 GLUT 事件循环上挂起一个可读事件......关于如何做到这一点的任何想法?可移植的标准 GLUT 代码是最好的,但我也对特定于平台的 hack 持开放态度。

谢谢!

4

1 回答 1

2

GLUT 不能很好地支持这一点。请参阅GLUT 常见问题解答 #18

您可以使用 glutIdleFunc 注册一个空闲函数,并在空闲函数中轮询您的套接字以查看是否有新数据可用。为了避免从套接字读取时发生阻塞,您需要通过调用将套接字设置为非阻塞:

#include <unistd.h>
#include <fcntl.h>
...
sockfd = socket(PF_INET, SOCK_STREAM, 0);
fcntl(sockfd, F_SETFL, O_NONBLOCK);

(摘自Beej 的网络指南

这种方法的缺点是您的应用程序将每秒检查 60 次套接字状态,而不是仅仅等待网络数据进入。

于 2008-10-19T05:23:49.477 回答