当前位置:网站首页 > 技术博客 > 正文

sigint信号



 
  
 
  

进程不论是捕获了该信号并从其信号处理程序返回,还是不理会该信号,写操作都返回EPIPE错误。

二、关于socket的recv:

对于TCP non-blocking socket, recv返回值== -1,但是errno == EAGAIN, 此时表示在执行recv时相应的socket buffer中没有数据,应该继续recv。

【If no messages are available at the socket and O_NONBLOCK is not set on the socket’s file descriptor, recv() shall block until a message arrives. If no messages are available at the socket and O_NONBLOCK is set on the socket’s file descriptor, recv() shall fail and set errno to [EAGAIN] or [EWOULDBLOCK].】

对于UDP recv 应该一直读取直到recv()-1 && errnoEAGAIN,表示buffer中数据包被全部读取。

接收数据时常遇到Resource temporarily unavailable的提示,errno代码为11(EAGAIN)。这表明你在非阻塞模式下调用了阻塞操作,在该操作没有完成就返回这个错误,这个错误不会破坏socket的同步,不用管它,下次循环接着recv就可以。对非阻塞socket而言,EAGAIN不是一种错误。在VxWorks和 Windows上,EAGAIN的名字叫做EWOULDBLOCK。其实这算不上错误,只是一种异常而已。

}

if (errno == EINTR)

所以希望能用相同方式处理信号的多次出现,最好用sigaction.信号只出现并处理一次,可以用signal.

版权声明


相关文章:

  • opencv imshow函数2025-08-15 09:30:00
  • html form表单属性2025-08-15 09:30:00
  • java各版本区别2025-08-15 09:30:00
  • i2c 协议2025-08-15 09:30:00
  • oracle视图怎么用2025-08-15 09:30:00
  • 虚拟机系统都有哪些2025-08-15 09:30:00
  • 文件权限 linux2025-08-15 09:30:00
  • ncurses howto2025-08-15 09:30:00
  • 网络黑客攻击方法有哪几种2025-08-15 09:30:00
  • 应用层对应的网络协议2025-08-15 09:30:00