
我用下面的语句读socket数据 while ($buffer) { $buffer = undef; recv(socket,$buffer,256,0); $receive .= $buffer; } 读了几次数据后,数据传完了时执行到recv(socket,$buffer,256,0);就阻塞了,不往下了。我想知道怎么去判断数据已经传完了应该往下执行了呢?我看了帮助,好象跟socket的阻塞与否有关,要用什么fcntl函数,不过不知道跟这有什么关系。
一直以为你和阻塞send一样,没完成任务,绝不回来。 没想到,你是这样容易满足,一个字节就能让你屁颠屁颠的回来,哪怕你的任务是1000,100,你和非阻塞的read 只有一个字节的区别而已。 难道是我误解了阻塞 read,我希望我误解他了。有谁和我一样,也被欺骗过,说说。或者告诉我,我的确误解阻塞read了
该程序是APUE2第14章程序清单14-1 [code] #include "head.h" char buf[500000]; int main(int argc, char** argv) { int nwrite, ntowrite; char *ptr = NULL; ntowrite = read(STDIN_FILENO, buf, sizeof(buf)); fprintf(stderr, "read %d bytes\n", ntowrite); set_fl(STDOUT_FILENO, O_NONBLOCK); ptr = buf; ...
read()阻塞的读套接字时,应该只有对方断开连接才会返回0; 但是我在一个多线程程序中,对方并没断掉连接也返回0了,可能会有什么其他状况呢? 还望高手指点!:em14:
我用阻塞模式的套接字,为什么连接上以后,就算对方不发送数据recv函数也不会阻塞呢? 和我在局域网里作实验速度快有什么关系吗? 或者是不是系统内部有一个时钟,阻塞了一定时间会停止阻塞呢?