当前位置:  技术问答>linux和unix

怎样处理RST响应

    来源: 互联网  发布时间:2016-08-31

    本文导语:  本帖最后由 afeideweixiao 于 2010-05-31 10:16:00 编辑 各位好, 我知道 当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告...

本帖最后由 afeideweixiao 于 2010-05-31 10:16:00 编辑
各位好,
我知道 当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。
根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。

我看到网上的处理方式基本是以把 SIGPIPE设为SIG_IGN,但是这个方法是需要发送两次的数据后的处理,前边那个会收到RST响应的数据发送被忽略。而我现在需要的是,只要不能完成数据到服务端的发送,就必须本地保存。所以,我的问题是,怎样知道收到了一个RST的响应?怎样进行RST的处理?

因为如果数据很小,一次能发送完成的情况下,当我在断开服务端后,我发现第一次发送数据的返回值就是需要发送数据的大小,而第二次发送的时候就直接关闭进程。


|
需要忽略SIGPIPE,第二次send的时候会出错,应该在这个时候处理(内核不会发送2次的)

|
send的返回值应该为负吧,判断返回值就行了。

|
楼上的正解,如果发送失败send会返回-1,你判断返回-1就保存本地就可以了。 
至于SIGPIPE信号,一般是给它一个空函数,让进程不必因为这样的错误关闭。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c/c++预处理命令预#error介绍
  • 关于linux内核中信号处理的问题?(信号处理的时间)
  • c/c++预处理命令预#undef介绍
  • 如何让批处理文件执行完毕后窗口不关闭,批处理文件直接点击执行
  • c/c++预处理命令预#pragma介绍
  • 视频处理问题,用批处理对视频进行打码
  • c/c++预处理命令预#line介绍
  • 请问如何在unix批处理中得到批处理参数!read吗?急在线等待!
  • c/c++预处理命令预#include介绍
  • 在linux上怎么编写一个模块来提供某个中断的中断处理程序呢?而且有哪些中断可以自己添加中断处理程序呢?
  • Python 3 Tkinter教程之事件Event绑定处理代码实例
  • 信号处理函数里面用CRT函数可能导致"信号触发-处理"死循环吗?
  • c/c++预处理命令预#,##使用介绍
  • 我想编一个把javac和java连起来用的批处理文件,请批处理文件中的参数怎么表示?
  • c/c++预处理命令预#if, #ifdef, #ifndef, #else, #elif, #endif介绍
  • 为何信号处理没有及时被处理呢?
  • c/c++预处理命令预#define语法和例子
  • 在编写驱动程序的时候,timer处理中,遇到了其他某timer处理例程以外的代码的执行。请指点,各位
  • c/c++预处理命令之预定义变量
  • 我准备做个批处理文件来删除某文件夹下后缀为Txt的文件,可系统一次执行不完,还要手动敲一个回车,怎么处理?
  • Python异常处理基础知识
  • 批量处理JDBC语句提高处理速度


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3