社区
Linux/Unix社区
帖子详情
如何让Socket Send的数据立即发送,并获得回应?
postbeerliu
2003-12-03 09:08:10
为了确保在网络故障的情况下,比如网线拔出了,程序能立即检测到网络不通。
我设想每次send 都让数据立即发送到网络上去,而不在系统发送缓冲区里等待。同时对方收到数据后立即确认。这样如果网线拔掉后数据将发送不出去,或者收不到回应。在现有的socket API下能否通过改变socket的选项来实现?(环境是RedHat Linux,以太网)。windows好象拔掉网线立即就检测到了
...全文
2325
7
打赏
收藏
如何让Socket Send的数据立即发送,并获得回应?
为了确保在网络故障的情况下,比如网线拔出了,程序能立即检测到网络不通。 我设想每次send 都让数据立即发送到网络上去,而不在系统发送缓冲区里等待。同时对方收到数据后立即确认。这样如果网线拔掉后数据将发送不出去,或者收不到回应。在现有的socket API下能否通过改变socket的选项来实现?(环境是RedHat Linux,以太网)。windows好象拔掉网线立即就检测到了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fierygnu
2003-12-04
打赏
举报
回复
TCP因为有流控和Nagle算法,所以要缓存。流控是无法避免的,跟网络有关。可做的是禁止Nagle算法,用setsockopt设置TCP_NODELAY选项。
拔掉网线就检测到是网卡驱动的功能。但因为网络故障可能发生在任何位置,所以TCP不会中断连接(否则TCP就无法使用了)。TCP_KEEPALIVE是一个方法,不过时间太久,一般为7200s。所以好的办法仍然是用heartbeat,当然做到立即是不可能的,网络延时等等元素必须考虑在内。
sdj
2003-12-04
打赏
举报
回复
实际数据的发送应该没法直接控制吧!即使TCPIP的数据已经提交,第二层协议要分析传输媒体是否可用,如果可以传输就发送,否则就要等待.
用select函数,
设置超时时间.如果socket就绪就send数据,如果send返回的字节与期望发送的字节数不一样
就判断超时时间是否到达,到达了就返回发送失败,否则在剩下的时间内继续发送.这样可以保证你的数据在全部提交后正确返回.
blh
2003-12-03
打赏
举报
回复
现有TCP/IP协议栈只提供传输的可靠保证,并不提供应用的事务处理数据的可靠性保证,对于事务可靠性保证需要应用自己完成(可以使用接收确认+重发机制+心跳检测)
linaxing
2003-12-03
打赏
举报
回复
写一个心搏函数。
参见《unix网络编程》卷一,第21章,带外数据。
postbeerliu
2003-12-03
打赏
举报
回复
请问具体该怎么实现呢?
Fireox
2003-12-03
打赏
举报
回复
检测是可以,但我设想每次send 都让数据立即发送到网络上去不太好吧
postbeerliu
2003-12-03
打赏
举报
回复
我觉得心跳函数确实可以检测到网络连接断掉,
但已经送入系统发送缓冲区的数据还是丢失了?
回到原来的问题上,有没有选项可以让数据一进入缓冲就立即发送出去?
socket
send
返回值_Linux网络编程中
socket
常见错误分析
socket
错误码:EINTR: 4阻塞的操作被取消阻塞的调用打断。如设置了
发送
接收超时,就会遇到这种错误。只能针对阻塞模式的
socket
。读,写阻塞的
socket
时,-1返回,错误号为INTR。另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。如果recv的返回值为0,那表明连接已经断开,接收操作也应该结束。ETIMEOUT:110...
Socket
send
函数和recv函数详解
int
send
(
SOCKET
s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用
send
函数来向TCP连接的另一端
发送
数据
。客户程序一般用
send
函数向服务器
发送
请求,而服务器则通常用
send
函数来向客户程序
发送
应答。该函数的第一个参数指定
发送
端套接字描述符;第二个参数指明一个存放应用程序要
发送
数据
的缓冲区;第三个参数指明实际要
发送
的
数据
的字节数;第四个参数一般置0。这里只描述同步
Socket
的se
Socket
流程
1.
Socket
基本概念介绍
Socket
是套接字的英文名称,主要用于网络通信编程。前几天看网络通信,发现有许多概念,诸如同步/异步,阻塞/非阻塞等,感觉迷惑不清,因此就先介绍一下这些概念。 同步方式是指
发送
方不等接收方响应,便接着
发送
下个
数据
包的通信方式; 异步方式是指
发送
方发出
数据
后,等到接收方发回响应才发下个
数据
包的通信方式。 阻塞套接字是指执行此套接字的网络调用时,
Windows下的
socket
通信,实时
发送
消息
在客户端与服务端进行信息交互的时候,我们经常想让他们进行实时对话,下面我将给出客户端与服务器实时通信的代码,采用C语言与C++混合编写,基于tcp协议,键盘输入想
发送
的
数据
,接收到
数据
之后,对
数据
进行解析。老规矩,让我们开始初始化套接字。
linux系统TCP协议之
Send
(转)
tcp协议本身是可靠的,并不等于应用程序用tcp
发送
数据
就一定是可靠的.不管是否阻塞,
send
发送
的大小,并不代表对端recv到多少的
数据
.在阻塞模式下,
send
函数的过程是将应用程序请求
发送
的
数据
拷贝到
发送
缓存中
发送
并得到确认后再返回.但由于
发送
缓存的存在,表现为:如果
发送
缓存大小比请求
发送
的大小要大,那么
send
函数
立即
返回,同时向网络中
发送
数据
;否则,
send
向网络
发送
缓存中不能...
Linux/Unix社区
23,125
社区成员
74,509
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章