读书人

socket发送数据总大小 以及 发送缓冲

发布时间: 2013-10-17 17:26:17 作者: rapoo

socket发送数据总大小 以及 发送缓冲区
1.以下句话对么? 要发送的数据大于发送缓冲区就返回错误了??
int send(SOCKET s, const char *buf, int len, int flags);
Socket的send函数的执行流程:send先比较待发送数据的长度len与套接字s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,则函数返回SOCKET_ERROR——http://blog.sina.com.cn/s/blog_732784f70100t0ti.html

2.《Unix网络编程》P48: 问我要发送个100M的文件,大于发送缓冲区了,就被投入睡眠了?
套接字阻塞状态,如果套接字的write发送缓冲区容不下应用进程的所有数据(或是应用进程的缓冲区大于套
接字的发送缓冲区,或是套接字的发送缓冲区中已有其他数据),该应用进程将被投入睡眠。直到应用进程
缓冲区中的所有数据都复制到套接字缓冲区write调用才返回。

建议参考linux中send相关源代码。(其实我也没看过,只是建议。)socket发送数据总大小  以及  发送缓冲区,该如何处理
[解决办法]
阻塞模式下就会阻塞到全部写出.
[解决办法]

引用:
Quote: 引用:

阻塞模式下就会阻塞到全部写出.


write的数据太大的话,我们要反复多次调用它才能写完。。很明显write即使是阻塞也成功返回了,
返回值是写入的部分数据大小。 所以,不是阻塞到全部写出。我理解有误么


永远检查返回值,谢谢.
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

阻塞模式下就会阻塞到全部写出.


write的数据太大的话,我们要反复多次调用它才能写完。。很明显write即使是阻塞也成功返回了,
返回值是写入的部分数据大小。 所以,不是阻塞到全部写出。我理解有误么


永远检查返回值,谢谢.

这什么和什么啊。 你说阻塞模式下会阻塞到全部写出;我说阻塞模式下可能只写了一部分就函数退出了,没有再阻塞直到全部写出。
返回值一直检查,谢谢。

那说明写没有成功!出错退出了的!阻塞模式下的话,是要写完数据的!
检查下返回值,看看errno是什么错误吧!

读书人网 >C++

热点推荐