TCP协议send返回表示什么意思?

myqoo 2011-05-02 02:29:19
tcp协议里,同步模式的socket,send返回表示数据写入协议,还是成功发送出网卡,还是对方已经收到数据,并且返回ACK应答。到底是那种呢?谢谢指教
...全文
901 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xun_jing 2011-05-02
  • 打赏
  • 举报
回复
send函数
int send(
SOCKET s,
const char FAR *buf,
int len,
int flags
);
不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;第二个参数指明一个存放应用程序要发送数据的缓冲区;第三个参数指明实际要发送的数据的字节数;第四个参数一般置0。这里只描述同步Socket的send函数的执行流程。当调用该函数时,send先比较待发送数据的长度len和套接字 s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR;如果len小于或者等于s的发送缓冲区的长度,那么 send先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么send就比较s的发送缓冲区的剩余空间和len,如果len大于剩余空间大小send就一直等待协议把s的发送缓冲中的数据发送完,如果 len小于剩余空间大小send就仅仅把buf中的数据copy到剩余空间里(注意并不是send把s的发送缓冲中的数据传到连接的另一端的,而是协议传的,send仅仅是把buf中的数据copy到s的发送缓冲区的剩余空间里)。如果send函数copy数据成功,就返回实际copy的字节数,如果 send在copy数据时出现错误,那么send就返回SOCKET_ERROR;如果send在等待协议传送数据时网络断开的话,那么send函数也返回SOCKET_ERROR。要注意send函数把buf中的数据成功copy到s的发送缓冲的剩余空间里后它就返回了,但是此时这些数据并不一定马上被传到连接的另一端。如果协议在后续的传送过程中出现网络错误的话,那么下一个Socket函数就会返回SOCKET_ERROR。(每一个除send外的 Socket函数在执行的最开始总要先等待套接字的发送缓冲中的数据被协议传送完毕才能继续,如果在等待时出现网络错误,那么该Socket函数就返回 SOCKET_ERROR)
注意:在Unix系统下,如果send在等待协议传送数据时网络断开的话,调用send的进程会接收到一个 SIGPIPE信号,进程对该信号的默认处理是进程终止。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xun_jing/archive/2010/03/17/5387540.aspx
Sou2012 2011-05-02
  • 打赏
  • 举报
回复
对应的TCP 接收函数 recv,

UPD中是 sendto、recvfrom
Sou2012 2011-05-02
  • 打赏
  • 举报
回复
send就是发送数据。
fish_phenix 2011-05-02
  • 打赏
  • 举报
回复
send只是表示 将要发送的数据写入本机的发送队列,send成功表示写入队列成功,但发送队列的数据未必马上发送出去,要看队列前面有没有其他数据

我们send只能操作到写入队列,真正发送的操作是操作系统自己完成的,这个有它自己的策略。两者甚至都不需要互斥的
lijianli9 2011-05-02
  • 打赏
  • 举报
回复
SEND表示本次提交的buffer中发送的字节数,但不代表对方已经成功接收到。
chenjiawei007 2011-05-02
  • 打赏
  • 举报
回复
send返回的仅仅是发送出去数据的字节数
myqoo 2011-05-02
  • 打赏
  • 举报
回复
不是说了同步的阻塞模式了
vcf_reader 2011-05-02
  • 打赏
  • 举报
回复
这个取决于通讯模式是阻塞/非阻塞模式

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧