关于socke的阻塞模式和非阻塞模式
各位大侠新年好。。。最近在学习socket通信, 其中socket的阻塞通信和非阻塞通信 实在让小弟费解,求各位大侠给个TCP Socket阻塞通信、非阻塞通信,和UDP Socket阻塞通信、非阻塞通信的 解释,最好能给小弟给个实例。。
谢谢各位。
[解决办法]
假设掉用一个函数,去执行一些运算,需要花比较久的时间。
你调用它,它开始执行,经过那么久以后,它执行完,然后函数调用返回计算结果,代码再继续往下执行,这就是 阻塞式的调用。
如果你调用它,它开始执行,函数调用立刻返回,代码再继续往下执行,这就是 非阻塞。至于函数计算的结果,会在计算完后某个时刻,通过别的方式,比如调用另外一个你定义好的函数告诉你(常称为回调函数),或是发个什么消息/信号给你。
- 千里孤行
[解决办法]
阻塞: blocked 或者叫 pending
比如一个接收函数 a() ,现在执行到a(); ,阻塞模式下 a() 一直不返回(去执行下一句) ,会一直等待,直到他接收到东西后就返回 去执行下一句 ,而非阻塞 的 a() 执行后就返回 无论他执行时是否接到 数据.
我这只是最通俗的理解,只希望帮助你理解! 班门弄斧了
yanghehong的解释就是你可以参考的
另外 我确切知道的 对于WinSock UDP (Windows Sockets v1.1 ):默认情况下recvfrom是阻塞的
你可以通过:
int iMode = 1;ioctlsocket(lo_Socket,FIONBIO, (u_long FAR*) &iMode);