上网,查询
发现有人在csdn问“为什么我的send()函数不是阻塞式的??”

为什么?????

一个朋友的回答
阻塞并不是说直到你发送数据到对方机器才返回的意思,它是说把你要发送的数据放入发送缓冲后,就直接返回。而有些不是阻塞时,如发送缓冲区没有了,他就直接返回,而阻塞时会等待发送缓冲区有空间。
还有一次发一个12M的数据,不好吧。

我的回答
我也遇到了这个问题,查阅了一些资料,send的阻塞应该这样来看

你是公司的老板,socket是个文员

现在你要把一个buffer发送给A公司的老板,现在你跑到文员那,说我要发送一个buffer给A公司的老板。。。
出现的情况,
1,假设现在文员正空闲呢(缓冲区没有数据,或者缓冲区的数据大于你的buffer),然后文员说,交给我吧,你回去吧,这就是为什么马上返回的原因
2,假设现在文员手头有很多buffer没发呢,文员告诉你,你等着,我前面的还没有发完,你在这阻塞一会吧,等我发完了前面的,待我的缓冲大于你的buffer的时候再。。。。。。。。

应该就是这个意思,文员假设在规定时间内没有发送完成,应该回来告诉你发送失败的,只是这个我不知道怎么做


还查了网上的文章

int  nZero=0;  
setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char  *)&nZero,sizeof(nZero));  
 
记得以前有些朋友讨论过,socket虽然send成功了,但是其实只是发送到数据缓冲区里面了,而并没有真正的在物理设备上发送出去;而通过这条语句,将发送缓冲区设置为0,即屏蔽掉发送缓冲以后,一旦send返回(当然是就阻塞套结字来说),就可以肯定数据已经在发送的途中了^_^,但是这样做也许会影响系统的性能  

 最后这个解答也许是最好的结果哦