
可以通过setsockopt,或者更简单的setblocking,
settimeout设置。阻塞式的socket的recv服从这样的规则:
当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,阻塞直到缓冲区中有数据。非阻塞式的socket的recv服从的规则则是:
当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,产生EAGAIN的错误并返回(在Python中会抛出一个异常)。两种情况都不会返回空字符串,返回空数据的结果是对方关闭了连接之后才会出现的。
所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回。 例如socket编程中connect、accept、recv、recvfrom这样的阻塞程序。
1、函数kbhit()是: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0 。
2、函数名:kbhit()(VC++60下为_kbhit())
3、用法:int kbhit(void);
4、包含头文件: include <conioh>
5、kbhit() 在执行时,检测是否有按键按下,有按下返回非0值,一般是1;没有按下返回0;
是非阻塞函数。
6、getch() 在执行时,检测按下什么键,如果不按键该函数不返回,是阻塞函数。
stdin 和 stdout 还有strerr 都是特殊的文件描述符而已,不可能阻塞的 。。它们用数字表示就是0,1,2;阻塞是在fget这个函数里面 。这个你有行库的话,你可以去看看库里面是怎么实现的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)