fcntl问题

gccli 2008-08-07 04:34:19
我用socket写一个客户端程序,用fcntl设置了非阻塞,但是在read时却阻塞了。
服务器并没有向客户端发数据,我想让他在read处不阻塞,怎么弄? 还有,最重要的,为什么fcntl不起作用????
fd = socket(AF_INET, SOCK_STREAM, 0);

fcntl(fd, F_SETFL, O_NONBLOCK);
...

len = read(fd, buf, 1024);//
...
...全文
293 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjl878586 2009-08-09
  • 打赏
  • 举报
回复
怎么回事?我也遇到这样的问题,有谁知道啊
快乐田伯光 2008-08-07
  • 打赏
  • 举报
回复
用read一样的可以做到非阻塞读的。
这个后面应该还有一个参数的。

fdflags = fcntl(fd, F_GETFL, 0);
gccli 2008-08-07
  • 打赏
  • 举报
回复
我好像找到了答案

http://topic.csdn.net/t/20030726/00/2073466.html
为什么不用recv读socket???
recv(flag[i],buf,sizeof(buf), MSG_DONTWAIT)非阻塞读

去试试
快乐田伯光 2008-08-07
  • 打赏
  • 举报
回复
最好是变量名不要混用,

int fdflags
int iRtn;

fdflags = fcntl(fd, F_GETFL);
fdflags |= O_NONBLOCK;
iRtn = fcntl(fd, F_SETFL, fdflags);
快乐田伯光 2008-08-07
  • 打赏
  • 举报
回复

int flags = fcntl(fd, F_GETFL);
flags ¦= O_NONBLOCK;
flags = fcntl(fd, F_SETFL, flags);

gccli 2008-08-07
  • 打赏
  • 举报
回复
谢谢楼上,又见到你了
是这样,没有设置其他任何属性,创建套接字后,调用fcntl
int flags = fcntl(fd, F_GETFL);//这时得到flags = 0
然后,flags |= O_NONBLOCK;
flags = fcntl(fd, F_SETFL, O_NONBLOCK); //这里得到flags也是0

奇怪了,怎么不起作用?
快乐田伯光 2008-08-07
  • 打赏
  • 举报
回复
fcntl()调用成功了没有?或是别的地方又改了属性了吧
快乐田伯光 2008-08-07
  • 打赏
  • 举报
回复
不可能吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧