社区
C++ 语言
帖子详情
关于Linux socket编程 send返回值的问题
loud1984
2009-07-05 07:28:33
使用阻塞模式,send的标志位置0,相当于write,一些书上说,send会一直阻塞知道把有用户缓冲区的所有内,容copy到内核。请问send的返回值代表啥意思?是copy到内核的字节数,还是非0就表示把所有的数据已经copy到内核(socket发送缓冲区)。
...全文
1687
6
打赏
收藏
关于Linux socket编程 send返回值的问题
使用阻塞模式,send的标志位置0,相当于write,一些书上说,send会一直阻塞知道把有用户缓冲区的所有内,容copy到内核。请问send的返回值代表啥意思?是copy到内核的字节数,还是非0就表示把所有的数据已经copy到内核(socket发送缓冲区)。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
猫已经找不回了
2009-07-05
打赏
举报
回复
send的返回值,就是实际copy到缓冲区的字节数。
http://topic.csdn.net/u/20080220/21/ccf9778c-1583-4cb9-803e-6875d6ff5958.html
晨星
2009-07-05
打赏
举报
回复
楼主说的也有道理。
send返回的值跟请求字节数不一样时,确实很有可能意味着错误。
但不管怎么,我想再尝试几次没有坏事,如果还不成功,再做为错误处理就是了。
当然,在要求不严格的应用中,直接做为错误处理也不是不可以。
大前置
2009-07-05
打赏
举报
回复
要分清楚,有困难
不想误人, 呵呵
给你个吵架的帖子,我收藏的
http://bbs.chinaunix.net/viewthread.php?tid=969374
晨星
2009-07-05
打赏
举报
回复
[Quote=引用 2 楼 loud1984 的回复:]
一般情况下,阻塞模式下好像应该一直把所有数据copy到发送缓冲区才返回。如果提前返回(即你种情况表明发送缓冲区满了),是不是一般都表示出现了一些异常情况??
[/Quote]
我觉得不用管那么多。
总之对于一次没有全部发送完的情况,你肯定是要处理的。
另外,也可能是缓冲区太小,而你一次发送的数据太多。
loud1984
2009-07-05
打赏
举报
回复
[Quote=引用 1 楼 steedhorse 的回复:]
是copy到内核的字节数。
比如你让它发送100个字符,它可能返回50,表示只拷贝走了50个。而后面的50个字符,你需要等socket可写之后重新发送。
[/Quote]一般情况下,阻塞模式下好像应该一直把所有数据copy到发送缓冲区才返回。如果提前返回(即你种情况表明发送缓冲区满了),是不是一般都表示出现了一些异常情况??
晨星
2009-07-05
打赏
举报
回复
是copy到内核的字节数。
比如你让它发送100个字符,它可能返回50,表示只拷贝走了50个。而后面的50个字符,你需要等socket可写之后重新发送。
linux
socket编程
中的recv和
send
的
返回值
介绍及其含义。
recv方法:模型: #include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sockfd, void *buf, size_t len, int flags);参数:sockfd创建的文件描述符fd,buf接收数据的缓冲区,len接收数据的长度,flags表示信息,默认设置为0当应用程序调用recv接...
socket
send
返回值
_
Linux
网络编程中socket常见错误分析
socket错误码:EINTR: 4阻塞的操作被取消阻塞的调用打断。如设置了发送接收超时,就会遇到这种错误。只能针对阻塞模式的socket。读,写阻塞的socket时,-1返回,错误号为INTR。另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。如果recv的
返回值
为0,那表明连接已经断开,接收操作也应该结束。ETIMEOUT:110...
socket/io(1)、
Linux
的
socket编程
详解
Linux
的
SOCKET编程
详解 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如 UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal) UNIX system V有:消息(mes......
【C语言】
Linux
socket 编程
在 TCP 连接中,`close()` 函数的执行将启动 TCP 连接的终止过程,通常称为四次挥手(four-way handshake)。函数在 Socket 编程中用于将一个未连接的 socket 转换成一个被动的监听 socket,指示内核应当接受指向该 socket 的连接请求。在
Linux
系统中,socket 是一种特殊的文件描述符,用于在网络中的不同主机间或者同一台主机中的不同进程间进行双向通信。函数时,如果存在待处理的连接请求,它会创建一个新的已连接套接字,并从队列中移除该请求。
Linux
系统编程(15)
send
/recv函数
粘包
问题
是网络编程中常遇到的一个
问题
,尤其是在使用 TCP 协议的情况下。由于 TCP 是一种面向字节流的协议,它不会维护消息边界,可能会导致多个独立发送的数据包在接收方被粘连在一起。抓包是指通过特定工具捕获网络中传输的数据包,以便分析其内容、结构和传输状态。是在网络编程中常用的两个函数,用于在套接字(socket)之间发送和接收数据。:如果发送方频繁地发送小数据包,接收方可能会在缓冲区中接收到这些小包的组合。:成功时返回实际发送的字节数,失败时返回 -1。用于接收来自连接的套接字的数据。
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章