社区
网络编程
帖子详情
send的返回值小于要发送的信息长度并且大于0怎么办
Moon1
2007-04-28 06:35:14
应该有这种情况吧
我看很多的代码都是看send的返回值是不是错误。
或者干脆忽略。
我用.net, 里面的Socket.Send 就是包装的win32的send。
包装的里面,我看了下,如果是-1,就抛出一个异常,否则就返回send的返回值
我看了很多.net代码都是根本不考虑他的返回值,好象要么是错误,要是么全都发送了
还是?如果 发送长度<数据长度,就循环继续发送剩余的?
...全文
672
3
打赏
收藏
send的返回值小于要发送的信息长度并且大于0怎么办
应该有这种情况吧 我看很多的代码都是看send的返回值是不是错误。 或者干脆忽略。 我用.net, 里面的Socket.Send 就是包装的win32的send。 包装的里面,我看了下,如果是-1,就抛出一个异常,否则就返回send的返回值 我看了很多.net代码都是根本不考虑他的返回值,好象要么是错误,要是么全都发送了 还是?如果 发送长度<数据长度,就循环继续发送剩余的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Oversense
2007-04-28
打赏
举报
回复
如果没出错,又>0 当然要循环
wujiabao
2007-04-28
打赏
举报
回复
我也没发现这种情况,如查真的出现你说的情况,下面代码可以参考
char sendbuf[MAX_SIZE];//要发送的数据
int len=??;//要发送的数据长度
int sendlen=0;//单次发送的数据长度
int sendtotal=0;//总共发送的长度
while(sendtotal<len)
{
sendlen=send(s,buf+sendtotal,len-sendtotal,0);
sendtotal+=sendlen;
}
microyzy
2007-04-28
打赏
举报
回复
没遇到过这个情况,按理论,这个只有在非阻塞socket下才会遇到吧,一般的处理当然是要根据返回值来判断,然后把剩余的再发送(应该等一会,系统缓冲区满了),因为有部分数据已经发送出去了,不能重复发送
当然,如果你知道server接收的逻辑,或者server也是你自己可以定的,怎么都行,保证数据完整但又不重复即可
非阻塞模式下
SEND
和 RECV 函数的
返回值
总结
send
和recv函数的各种
返回值
意义:
返回值
n
返回值
含义
大于
0 成功
发送
n 个字节 0 对端关闭连接
小于
0( -1) 出错或者被信号中断或者对端 TCP 窗口太小数据发不出去(
send
)或者当前网卡缓冲区已无数据可收(recv) 我们来逐一介绍下这三种情况:
返回值
大于
0 对于
send
和recv函数
返回值
大于
0,表示
发送
或接收多少字节,需要注意的是,在这种情形下,我们一定要判断下
send
函数的
返回值
是不是我们期望发...
socket
send
返回值
_Linux网络编程中socket常见错误分析
socket错误码:EINTR: 4阻塞的操作被取消阻塞的调用打断。如设置了
发送
接收超时,就会遇到这种错误。只能针对阻塞模式的socket。读,写阻塞的socket时,-1返回,错误号为INTR。另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。如果recv的
返回值
为0,那表明连接已经断开,接收操作也应该结束。ETIMEOUT:110...
非阻塞模式下,
send
和recv
返回值
的各种处理
send
/recv write/read 函数
返回值
大于
0,表示成功
发送
或成功接收了多少字节,但是
发送
或者接收的字节数可能是部分字节数,比如你需要
发送
buf_length
长度
的数据,但是
send
/write返回的n有可能 < buf_length,这是因为
发送
缓冲区可能已经满了。EINTR:当进程在一个慢系统调用中阻塞时,如果捕获到某个信号且相应信号处理函数返回时,这个系统调用不再阻塞而是被中断,就会调用返回错误(一般为-1)并设置 errno 为 EINTR。
返回值
小于
0,需要区分errno。
send
()和recv()函数详解(
send
返回值
举例)
转载:
send
()和recv()函数详解_weixin_34281537的博客-CSDN博客 不论是客户还是服务器应用程序都用
send
函数来向TCP连接的另一端
发送
数据。客户程序一般用
send
函数向服务器
发送
请求,而服务器则通常用
send
函数来向客户程序
发送
应答。 该函数的参数:这里只描述同步Socket的
send
函数的执行流程。当调用该函数时:(1)
send
先比较待
发送
数据的
长度
len和套接字s的
发送
缓冲区的
长度
,如果len
大于
s的
发送
缓冲区的
长度
,该函数返回 SOCKET_ERROR;(2) 如果
socket编程:recv/
send
和 recv/recvfrom
返回值
及处理
1、recv 和 recvfrom =0 当
返回值
为0时,表示对端已经关闭了这个链接,我们应该自己关闭这个链接,即close(sockfd)。另外因为异步操作会用select或epoll做事件触发,所以: 1、如果使用select,应该使用FD_CLR(sockfd,fd_set)将sockfd清除掉,不再监听。 2、如果使用epoll,系统会自己将 ...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章