跪求这段fcntl()的功能,还有我能在windows下实现这个功能吗?

阿木阿东 2012-09-24 10:38:09
int ff = fcntl(svr_conn, F_GETFL);
ff |= O_NONBLOCK;
fcntl(svr_conn, F_SETFL, ff);
n = read(svr_conn, &d, 1);
eno = errno;
ff &= ~O_NONBLOCK;
fcntl(svr_conn, F_SETFL, ff);

其中svr_conn = socket(AF_INET, SOCK_STREAM, 0);这是在linux下的一段代码,现在要移植到windows下,能否实现呢?各位大侠帮帮忙呗~~~
...全文
348 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2012-09-25
  • 打赏
  • 举报
回复
楼主的代码是先设置非阻塞标志,然后读一个字节,最后清除非阻塞标志
如果使用WinSock可以改成
[code=C/C++]
unsigned long flags;
/* 设置非阻塞 */
flags = 1;
ioctlsocket(svr_conn, FIONBIO, &flags);
n = recv(svr_conn, &d, 1, 0);
eno = WSAGetLastError();
/* 清除非阻塞 */
flags = 0;
ioctlsocket(svr_conn, FIONBIO, &flags);
[/Code]
阿木阿东 2012-09-24
  • 打赏
  • 举报
回复
能给提示一下么?楼主菜鸟一个啊·····无限纠结····
冷月清晖 2012-09-24
  • 打赏
  • 举报
回复
你查下MSDN,应该有的。
阿木阿东 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
创建socket后,把 fcntl 相关代码删除,换成:
u_long non_blk = 1
ioctlsocket(svr_conn, FIONBIO, &non_blk);
关于WinSock编程,你可以参考《WinSock网络编程经络》,论坛有源码:http://download.csdn.net/detail/geoff08zhang/4571358
[/Quote]
非常感谢,但还是不太明白,我要把两个fcntl都要替换成ioctlsocket(svr_conn, FIONBIO, &non_blk) 吗,还有关于O_NONBLOCK这个命令字的两个地方我该怎样修改呢?
qq120848369 2012-09-24
  • 打赏
  • 举报
回复
ioctl : FIONBIO
冷月清晖 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

创建socket后,把 fcntl 相关代码删除,换成:
u_long non_blk = 1
ioctlsocket(svr_conn, FIONBIO, &non_blk);
关于WinSock编程,你可以参考《WinSock网络编程经络》,论坛有源码:http://download.csdn.net/detail/geoff08zhang/4571358
[/Quote]

这本书的忠实拥护者?
冷月清晖 2012-09-24
  • 打赏
  • 举报
回复
laqhelen 2012-09-24
  • 打赏
  • 举报
回复
创建socket后,把 fcntl 相关代码删除,换成:
u_long non_blk = 1
ioctlsocket(svr_conn, FIONBIO, &non_blk);
关于WinSock编程,你可以参考《WinSock网络编程经络》,论坛有源码:http://download.csdn.net/detail/geoff08zhang/4571358
mymtom 2012-09-24
  • 打赏
  • 举报
回复
unsigned long flags
flags = 1; /* 这里根据需要设置成0或1 */
ioctlsocket(sockfd, FIONBIO, &flags)
阿木阿东 2012-09-24
  • 打赏
  • 举报
回复
自己顶一下,哪位大侠帮帮忙啊~~

69,373

社区成员

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

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