一般的说法:socket (TCP) 用 recv 接收数据。如果内核缓存区没有数据就会阻塞。
那如果TCP连接没有断,但对方一直不发数据, recv 函数调用是不是会一直把程序阻塞住。
一般的说法:socket (TCP) 用 recv 接收数据。如果内核缓存区没有数据就会阻塞。
那如果TCP连接没有断,但对方一直不发数据, recv 函数调用是不是会一直把程序阻塞住。
3 回答856 阅读✓ 已解决
1 回答2.3k 阅读
1 回答828 阅读✓ 已解决
2 回答1.1k 阅读
1 回答1.2k 阅读
1 回答713 阅读
1 回答781 阅读
socket分为阻塞和非阻塞两种,默认阻塞模式,可以通过参数设置修改为非阻塞;
阻塞的含义:其实是TCP/IP协议栈中的缓冲区,
(1)阻塞模式下:当buffer内没有数据了,那么就一直等待到有数据返回;
(2)非阻塞模式下:没有数据,会立即返回一个参数(例如python下是抛出一个异常)