毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

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

更新时间:2012-10-29:  来源:毕业论文

我在书上看到这个代码,所以产生了疑问。

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! 

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。