【发布时间】:2013-05-21 12:56:58
【问题描述】:
我有以下代码:
FD_SET(mc_sock, &readfds);
foo = FD_ISSET(mc_sock, &readfds); // returns 1
// Wait until some socket on the set is ready to be read
while(select (FD_SETSIZE,&readfds,NULL,NULL,ptv)) {
foo = FD_ISSET(mc_sock, &readfds); // returns 0
我将 mc_sock 添加到 readfds 并且 FD_ISSET 按预期返回 1。但是稍后当在 while 循环内部时,FD_ISSET 返回 0 而不调用 FD_CLR。 当我运行 MobileC 服务器但运行的代码中没有任何 FD_CLR 时,代码会跳转到 while。 我是集合和文件描述符的新手,我还没有发现发生了什么。你有什么想法吗?
谢谢!
【问题讨论】:
-
什么是
ptv?你如何初始化它? -
此外,
select可以返回负值,您必须检查它们并检查errno。
标签: linux sockets network-programming set file-descriptor