请问在winsock中int send(const void* lpBuf,int nBuflen)的返回字节比nBuflen小是什么情况?
调用send成功后,返回值比nBuflen小是怎么回事?是不是没发送完还是接受端没收
全
问题点数:20、回复次数:3Top
1 楼freelybird(阿愚)回复于 2002-04-30 11:12:31 得分 10
这是我上次解释recv(..)的回答.
1. TCP是流式的,它传送的byte stream. 所以接收方recv(...)调一次可能只接收一个字节,也可接收多个字节
2. 所以必须循环调
3. 当这个socket被对方close()时, recv(...)返回0
4. 当这个socket被对方错误时, recv(...)返回<0
同样,send也类似,
1. 在sock中有一buffer,当你的数据发送速度快于网络速度时,它们就会同步.换句话说,当buffer满时,你即不能再了
2. 返回的len是实际发送的字节数
3. 你可以setsockopt(...)调整buffer大小Top
2 楼xuying()回复于 2002-04-30 11:21:56 得分 9
同意 freelybird(阿愚)。
socket的send函数是将数据拷贝到TCP协议栈的待发送缓冲区。如果TCP的缓冲区放不下所有的数据,就会只拷贝一部分,造成send返回的小于nBufferLen。当TCP实际将数据发送走后,TCP缓冲区会空出来,此时可以继续调用send,将剩余的数据拷贝进TCP缓冲区。
所以send必须循环调用,直至发送完全。Top
3 楼no1vcl(大吃一碗)回复于 2002-04-30 12:21:56 得分 1
来看看MSDN的标准答案:
If no error occurs, send returns the total number of bytes sent, which can be less than the number indicated by len for nonblocking sockets. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.
Top
相关问题
- int Size(void)const==const int Size(void)吗?
- void func(const A &a) 中const的作用?
- BYTE* void*和const void*有什么区别?
- error C2664: 'strcpy' : cannot convert parameter 2 from 'class CString (void) const' to 'const char *'
- 请问void foo() const中的const是什么意思?
- void f(const char **msg) { *msg = "oh my god."; }, const 起什么作用?
- 请问void setMinimumSize ( const QSize & ) 参数const QSize & 是什么类型?
- 标准库函数qsort()的声明?int (__cdecl *compare )(const void * arg1, const void * arg2 ) ;
- const?
- const




