linux 网络编程 send 函数 的返回值是不是会小于输入值
linux 网络编程 send 函数 的返回值是否会小于输入值?我在书上看到这个代码,所以产生了疑问。C/C++ codesiz
linux 网络编程 send 函数 的返回值是否会小于输入值?
我在书上看到这个代码,所以产生了疑问。
C/C++ codesize = strlen(cbuf);totalSent = 0;do{ bytesSent = send(sock, cbuf + totalSent,strlen(cbuf+totalSent), 0); if(bytesSent == -1) break; totalSent+=bytesSent;}while(totalSent < size);
如果改用write会怎样?
[解决办法]你这代码有问题(运行可能没问题,但写得很不专业),
如果是阻塞的,那么send一定会发送完成才返回(除非出错);
如果是非阻塞的,那代码倒是对的,即需要判断send是否发送了所有数据;
问题出在do while之上,根据上面说的,如果是阻塞的,显然do while没有用;
如果是非阻塞的,则用法不对,非阻塞放到do while里面之后,就成了阻塞的了(跟阻塞的行为完全一样),
换句话说,你把非阻塞的套节字用成了阻塞的了(那还不如用阻塞的呢,完全没有体现非阻塞的优势)。
这就好比你用udp(不可靠)实现tcp(可靠)一样,你完全可以直接用tcp!