首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux 网络编程 send 函数 的返回值是不是会小于输入值

2012-11-09 
linux 网络编程 send 函数 的返回值是否会小于输入值?我在书上看到这个代码,所以产生了疑问。C/C++ codesiz

linux 网络编程 send 函数 的返回值是否会小于输入值?
我在书上看到这个代码,所以产生了疑问。

C/C++ code
size = 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!

热点排行