社区
网络编程
帖子详情
关于TCP下send函数的问题
SilverWings
2010-05-18 09:46:34
1. 用getsockopt函数看了一下,winsock的发送缓冲区默认大小有8k,但我不论是在阻塞或非阻塞模式下用send发送一个大于8k的包时,函数都可以正常返回。这样是不是说当一次send的数据大于缓冲区的大小的时候,操作系统会自动帮我们分包?
2. send一次发送的数据到底有没有大小限制,有的话是多少?
3. 一般send多大的数据才比较合适?
...全文
384
13
打赏
收藏
关于TCP下send函数的问题
1. 用getsockopt函数看了一下,winsock的发送缓冲区默认大小有8k,但我不论是在阻塞或非阻塞模式下用send发送一个大于8k的包时,函数都可以正常返回。这样是不是说当一次send的数据大于缓冲区的大小的时候,操作系统会自动帮我们分包? 2. send一次发送的数据到底有没有大小限制,有的话是多少? 3. 一般send多大的数据才比较合适?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dong364
2010-05-20
打赏
举报
回复
http://dev.firnow.com/course/3_program/vc/vc_js/20090307/159227.html
【天运子】
2010-05-20
打赏
举报
回复
1024*不要太大就行了啊,自己也可以测试下啊
hello_symbol
2010-05-20
打赏
举报
回复
这个好像受限于程序站的大小吧
wangk
2010-05-20
打赏
举报
回复
[Quote=引用 4 楼 silverwings 的回复:]
我做测试的时候,用send发送15k的数据,这明显已经超过系统缓冲区的大小了,但send返回值也还是等于15k,要循环发送我也知道,我就是想知道send发数据到底有没有大小限制,
我现在要做一个程序发送大量的数据,一般一次send多大的数据效率会高点
[/Quote]
windows下使用TransmitFile或TransmitPackets来发送文件快一点。
buptzwp
2010-05-20
打赏
举报
回复
[Quote=引用 4 楼 silverwings 的回复:]
我做测试的时候,用send发送15k的数据,这明显已经超过系统缓冲区的大小了,但send返回值也还是等于15k,要循环发送我也知道,我就是想知道send发数据到底有没有大小限制,
我现在要做一个程序发送大量的数据,一般一次send多大的数据效率会高点
[/Quote]
在阻塞的情况下,send函数可以发送很大的数据(本人发过1.5M的大小)。但是sendto能发送的却很小(具体不知道多大),如果超过了,就会sendto失败。
ddddfbb
2010-05-20
打赏
举报
回复
en ...你的包被底层分开发送了 超过了MTU的设置都分段了 但是ip层会在你发的包上打标识全发完后会返回给你这个包发送的字节数
dinona
2010-05-20
打赏
举报
回复
你要在两台机子之间测试,不要在同一台机子测试
sanguomi
2010-05-19
打赏
举报
回复
Send 返回的并不是你发送,服务端接收的
weizhen861207
2010-05-19
打赏
举报
回复
我也发现这个问题了 发送的数据超过8K也成功返回
SilverWings
2010-05-18
打赏
举报
回复
我做测试的时候,用send发送15k的数据,这明显已经超过系统缓冲区的大小了,但send返回值也还是等于15k,要循环发送我也知道,我就是想知道send发数据到底有没有大小限制,
我现在要做一个程序发送大量的数据,一般一次send多大的数据效率会高点
BloodFighter
2010-05-18
打赏
举报
回复
首先说你的tcp还是udp呀,
如果是udp,包超过了,铁定完蛋
tcp是流,因此那个buffer就是一个缓冲,因此不受限制
还有socket的send函数是有返回值的,那个是你实际的发送数据量,并不是你send一次就完事的,要做一个循环反复发送,直到你的所有数据全部发完才算
superdiablo
2010-05-18
打赏
举报
回复
你要看实际返回的已发送字节数是多少。一次发送的数据不会超过缓冲区大小。看你什么应用,如果是发送文件每次发送越大越好,当然超过缓冲区TCP只会把部分数据拷贝到缓冲区里,其他的你还得再次发送。
arong1234
2010-05-18
打赏
举报
回复
send从来都不会等所有数据发送完毕再返回,他的返回值是实际发送的字节数,你需要重发还没有发出的部分
send发送一般不会超过1.5kb
随便多大的报文都不保证完整发出,你必须重发没有发完的数据
TCP
之
send
函数
研究
int
send
( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用
send
函数
来向
TCP
连接的另一端发送数据。 客户程序一般用
send
函数
向服务器发送请求,而服务器则通常用
send
函数
来向客户程序发送应答。 该
函数
的第一个参数指定发送端套接字描述符; 第二个参数指
TCP
send
函数
阻塞发送数据详解
send
函数
int
send
( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用
send
函数
来向
TCP
连接的另一端发送数据。 客户程序一般用
send
函数
向服务器发送请求,而服务器则通常用
send
函数
来向客户程序发送应答。 该
函数
的第一个参数指定发送端套接
linux下
send
函数
缓冲区
问题
,
TCP
Send
函数
的阻塞和非阻塞,以及
TCP
发送数据的异常情况...
有了
TCP
协议本身的 ACK 机制为什么还需要业务层的ACK 机制?答:这个
问题
从操作系统(linux/windows/android/ios)实现
TCP
协议的原理角度来说明更合适:1 操作系统在
TCP
发送端创建了一个
TCP
发送缓冲区,在接收端创建了一个
TCP
接收缓冲区;2 在发送端应用层程序调用
send
()方法成功后,实际是将数据写入了
TCP
发送缓冲区;3 根据
TCP
协议的规定,在
TCP
连接...
TCP
中的
send
函数
---
tcp
_
send
msg
函数
的实现
当应用层程序调用
send
发送数据之后,相应系统调用为sys_
send
msg,在socket文件系统中,该调用指向inet_
send
msg。 而再对于
TCP
协议,inet_
send
msg指向
tcp
_
send
msg
函数
,所以
tcp
的发送
函数
接口是
tcp
_
send
msg。 该
函数
首先对sock加锁防止下半段中断访问,对于阻塞的发送模式还需设置超时时间。
TCP
服务器程序突然中断 由于
send
函数
导致
最近在写
tcp
客户端服务器操作 设置服务器为单线程多个客户端连入。 开发过程中出现 服务器代码运行过程中 在
send
处突然中断情况。通过GDB调试发现
send
函数
报错提示打开文件错误 由于测试过程纵单节点反复连入客户端。在client socket关闭情况下 调用
send
函数
此时socketfd已被关闭。所以提示错误。这是
send
函数
一种系统错误 会使程序直接中断。希望对遇到
问题
的人有所帮助。 ...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章