|
关于socket的TCP_NODELAY属性,创建socket设置生效后,还要每次send都设置;还是每次send都需设置
[复制链接]
问个问题
sock的属性设置setsockopt有些是在创建socket时给定.但这个属性TCP_NODELAY在设定后,VxWorks环境下过一段时间就没重置为默认值的,不知是驱动tcp/ip协议栈的问题;还是每次发送send时都必须调用一次.
实现代码如下:
{
int ret,optVal=1;
ret=setsockopt (sockfd,IPPROTO_TCP,TCP_NODELAY,(char*)&optVal, sizeof(optVal));
}
条件:用的是非阻塞模式的tcp连接.在vxWorks环境下验证
测试1:
1.在sock创建,设置该参数生效.
2.在发送数据过程中如果tcp/ip协议窗口window update发生更新(etheral catch),大流量tcp数据下产生.
发现该option设置被清除;大流量发送大约46K字节后失效(65K发送缓冲).
3.如果没有大流量数据,不发生window update,则option一直生效,每发送一个包,对方立刻收到.
测试2:
1.如果每个发送每个send包时都调用重设上述选项,则tcp在发送方不粘包?
这样会不会增加开销,这个属性对socket不能保持吗?
问题:
1.协议栈不支持TCP_NODELAY属性保持吗?这是驱动协议栈的问题还是应用使用的问题
2.必须每次调用send(tcp client or server)都需要设置该参数吗?
欢迎有要关开发经验的人给出相关理解和说明依据
|
|