首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux下tcp协议的socket可靠传输,该怎么处理

2012-04-11 
linux下tcp协议的socket可靠传输tcp协议是可靠的,socket只是实现的一种具体方式,并不代表我们使用socket编

linux下tcp协议的socket可靠传输
tcp协议是可靠的,socket只是实现的一种具体方式,并不代表我们使用socket编写的应用程序一定是传输可靠的。
   
  我现在遇到的问题是:
  一个简单的单向上传协议,使用send不停的向tcp server发送数据包,可以理解为一个大文件的上传,由于send、write等函数仅仅是把待发送数据拷贝到发送缓冲区,并不是真正的发送成功,因此,在网络出现瞬时断开时,发送缓冲区中的数据可能无法继续发送成功,但是由于是单向协议,没有服务端的收包确认,应用程序本身也不知道发送缓冲区中还剩余哪些数据没有发送成功,造成实际上的丢包
   
  请问大家,如何确保发送缓冲区中数据成功送达tcp server,而不:
1)修改应用协议
2)降低传输效率
  之所以提到2,是因为我采用

C/C++ code
int nFixedSndBufSize = 0;struct timeval stTimeval;setsockopt(hSockFD, SOL_SOCKET, SO_SNDBUF, &nFixedSndBufSize, sizeof(int));

  强制设置发送缓冲为零时,可能能确保成功,但是发送效率急剧下降。

[解决办法]
没有服务端的收包确认?既然是tcp,不会连tcp协议的ack也没有吧?
[解决办法]
难道send返回>0不代表已经收到ack确认了么?
[解决办法]
像掉电断网这类问题,要是没有确认机制还是不好弄
[解决办法]
这种协议合理吗

热点排行