首页 > 其他分享 >iperf报错broken pipe和bad file descriptiopn

iperf报错broken pipe和bad file descriptiopn

时间:2024-06-13 19:55:32浏览次数:13  
标签:E5% BC% E6% pipe descriptiopn 报错 error iperf select

在进行iperf测试时,出现了两个错误:

(1)iperf3:error - select failed: bad file descriptor

(2)iperf3: error - unable to send conrol message: broken pipe

这两个错误都是在客户端出现的。

根据iperf源码,分析了这两个错误的调用函数以及可能出错原因。

1、iperf简介

网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理、网络存在安全漏洞等原因,都会导致网络带宽利用率不高。要找到网络带宽利用率不高的原因,就需要对网络传输进行监控,此时就需要用到一些网络性能评估工具,而Iperf就是这样一款网络带宽测试工具。

详细介绍可以看这个博客:https://blog.csdn.net/bingyu9875/article/details/105700655

2、Bad file descriptor错误

在iperf源码中查找Bad file descriptor关键字找不到,于是查找error - select failed关键字。

发现在src/iperf_strerror.c文件中,当int_error=IESELECT时,会报出select failed关键字。

根据error-关键字,确定调用iperf_strerror.c中的iperf_streror函数的是src/main.c。

main.c中调用run(test),查看main.c中的run函数,当iperf_run_client(test) < 0时,进入报错分支,就会报出error-关键字。

iperf_run_client函数在src/iperf_client_api.c文件中,发现当result < 0 && errno != EINTR时,i_errno = IESELECT。而result = select(test->max_fd + 1, &read_set, &write_set, NULL, timeout),result函数在库文件sys/select.h中。

select于监视文件描述符的变化情况——读写或是异常,如果有一个服务器程序维护多个TCP连接,判断有数据到达的办法是监听一组文件描述符,获取事件变化。

select返回负值是select错误。select函数的详细介绍可以查看这个博客:https://blog.csdn.net/Orange_pa/article/details/128110033。

3、 broken pipe错误

与上一错误类似,查找 broken pipe关键字没有找到,通过error - unable to send conrol message关键字发现了在src/iperf_strerror.c文件中,当int_error=IESENDMESSAGE时,报出关键字。

在main.c文件中调用run函数,在iperf_client_api.c文件中调用iperf_run_client函数。

但是在iperf_run_client函数中,调用iperf_set_send_state函数。

iperf_set_send_state函数在src/iperf_api.c函数中定义,当 Nwrite(test->ctrl_sck, (char*) &state, sizeof(state), Ptcp) < 0时, i_errno = IESENDMESSAGE。 Nwrite函数定义在src/net.c文件中,该函数内部定义r = write(fd, buf, nleft),,当r<0时会进入错误分支。 write函数为库函数,write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内,如果顺利write()会返回实际写入的字节数(len)。当有错误发生时则返回-1,错误代码存入errno中。 write函数详细介绍可以看这篇博客:https://blog.csdn.net/hhhlizhao/article/details/71552588#:~:text=1%E3%80%81write%20%28%29%E5%87%BD%E6%95%B0%E5%AE%9A%E4%B9%89%EF%BC%9Assize_t%20write%20%28int%20fd%2C%20const%20void,%2A%20buf%2C%20size_t%20count%29%3B%E5%87%BD%E6%95%B0%E8%AF%B4%E6%98%8E%EF%BC%9Awrite%20%28%29%E4%BC%9A%E6%8A%8A%E5%8F%82%E6%95%B0buf%E6%89%80%E6%8C%87%E7%9A%84%E5%86%85%E5%AD%98%E5%86%99%E5%85%A5count%E4%B8%AA%E5%AD%97%E8%8A%82%E5%88%B0%E5%8F%82%E6%95%B0fd%E6%89%80%E6%8C%87%E7%9A%84%E6%96%87%E4%BB%B6%E5%86%85%E3%80%82%20%E8%BF%94%E5%9B%9E%E5%80%BC%EF%BC%9A%E5%A6%82%E6%9E%9C%E9%A1%BA%E5%88%A9write%20%28%29%E4%BC%9A%E8%BF%94%E5%9B%9E%E5%AE%9E%E9%99%85%E5%86%99%E5%85%A5%E7%9A%84%E5%AD%97%E8%8A%82%E6%95%B0%EF%BC%88len%EF%BC%89%E3%80%82

 

标签:E5%,BC%,E6%,pipe,descriptiopn,报错,error,iperf,select
From: https://www.cnblogs.com/yiliu666-oo/p/18246662

相关文章

  • Spring Junit 测试报错 java.lang.IllegalStateException
    写测试代码的时候出现了java.lang.IllegalStateException:CouldnotloadTestContextBootstrapper[null].Specify@BootstrapWith's'value'attributeormakethedefaultbootstrapperclassavailable.代码如下:packagecom.example.service;importcom.example.c......
  • Ruoyi集成flyway后启动报错的解决方法
    ruoyi系列框架是开源中非常好的源码平台,使用宽松的开源协议进行源代码的开放。不管是单体版、前后端分离甚至是微服务架构,均提供了相应的代码。基于ruoyi可以做自己的后台系统,也可以学习很多技术的集成。而flyway是java里面的数据库脚本自动管理工具,使用flyway可以在应用程序升级......
  • fasterxml ToStringSerializerBase报错
    ToStringSerializerBase报错报错内容整合dubbo时报错Causedby:java.lang.NoClassDefFoundError:com/fasterxml/jackson/databind/ser/std/ToStringSerializerBase atcom.fasterxml.jackson.datatype.jsr310.JavaTimeModule.<init>(JavaTimeModule.java:158)~[jackson-dataty......
  • requests 开启charles代理报错
    当前报错urllib3版本:1.26.7解决代理报错的几种方式:配置代理请求proxies={'http':'http://127.0.0.1:8888','https':'http://127.0.0.1:8888'}data=requests.post(url,json=body,headers=headers,verify=False,pr......
  • Let's Encrypt续费证书异常报错解决
    Let'sEncrypt续费证书异常报错解决在续费免费证书时出现错误,这里小记一下。现象#certbotcertonly--webroot-w/usr/share/nginx/html-dgh.wqyfchina.comSavingdebuglogto/var/log/letsencrypt/letsencrypt.logRequestingacertificateforgh.wqyfchina.comCer......
  • DockerCompose+Jenkins+Pipeline流水线打包Vue项目(解压安装配置Node)入门
    场景DockerCompose+Jenkins+Pipeline流水线打包SpringBoot项目(解压安装配置JDK、Maven等)入门:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/139631755以上使用流水线配置和打包springboot后台项目,如果要使用流水线和配置node打包vue项目,可按如下步骤。注:博......
  • Oracle报错:“Error in invoking target ‘agent nmhs’ of makefile...”
    Oracle报错:“Errorininvokingtarget‘agentnmhs’ofmakefile...”  前言:Oracle在安装过程中的报错一定要重视,这决定你后续是否能完成安装以及是否能使用。我这边会陆续汇总一些报错现象以及解决方案共享。##InstallProduct86%报错信息:“Errorininvokingtarget'......
  • 报错:ResizeObserver loop limit exceeded的处理方法(学习自用)
    报错:ResizeObserverlooplimitexceeded处理方法:在main.js添加://从elementui中引出TableimportElementUI,{Table}from'element-ui'//处理table宽度报错的问题constfixElTableErr=table=>{constoldResizeListener=table.methods.resizeListenertabl......
  • 【jmeter】ubuntu分布式jmeter报错:java.rmi.ConnectException: Connection refused to
    一、场景   由于高并发测试,服务器资源不够用,所以需要使用jmeter分布式进行测试,但是测试过程中报错:java.rmi.ConnectException:Connectionrefusedtohost:127.0.1.1;  二、问题原因   就是hostname-i如果返回的是127.0.1.1 三、处理方法   修改hostna......
  • DockerCompose+Jenkins+Pipeline流水线打包SpringBoot项目(解压安装配置JDK、Maven等)
    场景DockerCompose中部署Jenkins(DockerDesktop在windows上数据卷映射):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/139491855Docker+Jenkins+Gitee+Maven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑:https://blog.csdn.net/BADAO_LIUMANG_......