首页 > 其他分享 >关于Interrupted system call 报错

关于Interrupted system call 报错

时间:2024-05-29 13:47:11浏览次数:31  
标签:调用 err 系统 system else call 报错

Socket编程或者其他的一些慢速系统调用中,我们经常会碰到“interrupted system call”的问题。

这些系统调用包括:

  • 长时间读取磁盘,
  • 等待网络连接i.e. Accept,
  • 阻塞的系统调用, i.e.Read/Write epoll_wait/kevent

这是因为系统调用在执行过程中有可能收到来自外部的信号中断,那么该系统调用就会返回一个EINTR错误,我们的程序需要对该错误做相应的处理。

处理的方式有三种:

这里我们附加的golang 代码 是 人为重启中断的系统调用:


func (np *KqueuePoller) readFd(fd int) ([]byte, error) {
	b := []byte{}
	for {
		buf := make([]byte, BUFF_SIZE)

		n, err := syscall.Read(fd, buf)
		if err != nil {
			if err == syscall.EAGAIN {
				break
			} else if err == syscall.EINTR {
				// 读取socket过程中碰到interrupted system call,直接跳转下一次for loop
				log.Printf("interrupted while reading")
			} else {
				return nil, err
			}
		} else if n == 0 {
			log.Printf("closing socket: %d", fd)
			return nil, io.EOF
		} else {
			b = append(b, buf[:n]...)
		}
	}
	return b, nil
}

以上代码来自 Unix环境下的kqueue/kevent IO多路复用的golang实现:https://github.com/zongzw-learn/learn-go/blob/master/basics/tcp-poller/netpoller.go#L163

标签:调用,err,系统,system,else,call,报错
From: https://www.cnblogs.com/zongzw/p/18220074

相关文章

  • python爬虫不报错也不出结果?
    刚学爬虫对着视频想爬个网络小说但是代码写完不报错也不出结果,大佬们帮忙看看啥情况importreimportrequestsfromlxmlimportetreeheaders={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/125.0.0......
  • systemctl常用命令
     注册服务sudovim/etc/systemd/system/test.service[Unit]Description=testJavaApplicationAfter=network.target[Service]User=rootWorkingDirectory=/data/javaApps#这里主要使用的是绝对路径,包括java命令和jar包位置,最后的#--spring.profiles.active=dev代表的是......
  • Java三种方法实现多线程,继承Thread类,实现Runnable接口,实现Callable接口
    目录线程:继承Thread类:实现Runnable类:实现Callable接口:验证多线程:线程:定义:进程可以同时执行多个任务,每个任务就是线程。举个例子:一个Java程序,如果同时有两个循环同时进行,就是线程。再比如,你用百度网盘,边看视频,边下载。继承Thread类:步骤写在代码里的classmythrea......
  • Makefile中,call `$(call)` 函数
    在Makefile中,`$(call...)`是一个函数调用语法,它允许你定义一个名为函数的宏,并在Makefile的其他地方调用它。这种功能提供了一种重用Makefile中复杂或经常重复的代码的方法。`$(call...)`语法的基本形式如下:```make$(callfunction_name,arg1,arg2,...)```这里,`function_nam......
  • React中何时使用memo、useCallback、useMemo以及useRef进行性能优化
    react无法做到像vue一样自动收集依赖更新(期待react19的ReactCompiler),需要开发人员手动的进行性能优化,此时memo、useCallback、useMemo、useRef就是性能优化中的重要API本文虽然介绍可应用场景,但是正常开发中,尤其是useCallback。除非遇到性能问题或者组件库封装,亦或......
  • SpringBoot升级到3.2.0报错Invalid value type for attribute ‘factoryBeanObjectTyp
    1现象SpringBoot由3.1.0升级为3.2.0时报的错:直接debug进入该行,看到报错的bean信息:看到是MyBatis出问题。2处理MyBatis先想到mybatis-spring版本较低导致。大家应该都用的MyBatisPlus,其实可暂缓升级3.2,等待一段时间,升级MyBatisPlus即可,目前MyBatisPlus的mybatis-spring......
  • Towards Universal Sequence Representation Learning for Recommender Systems
    目录概符号说明UniSRec统一的文本表示统一的序列表示Parameter-EfficientFine-tuning代码HouY.,MuS.,ZhaoW.X.,LiY.,DingB.andWenJ.TowardsUniversalSequenceRepresentationLearningforRecommenderSystems.KDD,2022.概本文提出了一个用text替代ID......
  • 性能分析,竟然一开始报错了
    今天介绍几个与性能分析和系统监控相关的Python库:cProfile、line_profiler,以及psutil。每个库都有其独特用途,适用于不同层面的性能优化和监控。1.cProfile简介:cProfile是Python标准库中的一个性能分析工具,主要用于分析程序运行时的性能瓶颈,如函数调用次数、总时间消耗......
  • EditableProTable 新增一行时,报错“EditableProTable 新增一行时,报错 Uncaught (in
    1、EditableProTable 新增一行时,报错Uncaught(inpromise)Error:请设置recordCreatorProps.record并返回一个唯一的keyatObject.eval[ascurrent](index.js:679:1)atObject.eval[asaddEditRecord](index.js:11:1)at_callee$(index.js:50:1)......
  • 关于报错:npm下载时出现node_modules\.pnpm\[email protected]\node_modules\node-s
    关于npminstall出现Failedin911msatF:\Sert-Vue-master\vue\node_modules\.pnpm\[email protected]\node_modules\node-sass ELIFECYCLE Commandfailedwithexitcode1. 最开始从GitHub拉了一个项目,然后npmi的时候出现了报错npmERR!gypERR!stackError:`......