golang:An operation on a socket could not be performed because the system lacked sufficient buffer s
1、问题
conn, err := net.Dial(“tcp”, ‘127.0.0.1:50001’)
执行此语句报错详细报错信息
dial tcp 127.0.0.1:50001: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
此报错的原因一般是系统端口已用尽,无法再建立新的Socket连接
2、分析
命令行查看端口的使用情况,查看分析那个程序存在假死的端口占用。
netstat -ano >D:\1.txt
查看1.txt
活动连接协议 本地地址 外部地址 状态 PIDTCP 192.168.2.19:60005 192.168.2.18:20742 CLOSE_WAIT 5128TCP 192.168.2.19:60005 192.168.2.18:29758 CLOSE_WAIT 5128TCP 192.168.2.19:60005 192.168.2.18:29759 CLOSE_WAIT 5128TCP 192.168.2.19:60005 192.168.2.18:29760 CLOSE_WAIT 5128
一般情况下可能存在大量CLOSE_WAIT 或者TIME_WAIT 导致的
详细处理方法详见 【服务器 TIME_WAIT和CLOSE_WAIT】 http://blog.csdn.net/xia_xing/article/details/53352486
3、查看结果发现 存在很多CLOSE_WAIT状态的SOKET
服务端代码如下:
func handleConn(c net.Conn) {//Mark1for {rw := bufio.NewReader(c)Receivebag := make([]byte, 4*1024) //数据包接收区k, err := rw.Read(Receivebag)if k == 0 || err != nil {return}v, ok := buffermap[c] //判断缓冲区map中存不存在此连接if ok { //存在v = append(v, Receivebag[0:k]...)buffermap[c] = v} else {buffermap[c] = Receivebag[0:k] //这是此连接的第一个数据包}Receivebag = nilhandleStickpackage(c) //处理粘包解包}
}
正常建立连接不会存在问题,若是大量的连接频繁建立重建,连接可能存在无法正常关闭的情况,从而导致大量的CLOSE_WAIT连接,占用无法释放导致无法创建新的连接。
处理方法:
在//Mark1处增加socket的close,问题解决。
func handleConn(c net.Conn) {defer c.Close() //关闭连接//Mark1for {rw := bufio.NewReader(c)Receivebag := make([]byte, 4*1024) //数据包接收区k, err := rw.Read(Receivebag)if k == 0 || err != nil {return}v, ok := buffermap[c] //判断缓冲区map中存不存在此连接if ok { //存在v = append(v, Receivebag[0:k]...)buffermap[c] = v} else {buffermap[c] = Receivebag[0:k] //这是此连接的第一个数据包}Receivebag = nilhandleStickpackage(c) //处理粘包解包}
}
golang:An operation on a socket could not be performed because the system lacked sufficient buffer s相关推荐
- bind: An operation on a socket could not be performed because the system lacked sufficient buffer sp
如题所示错误并不一定是代码出问题了 最近在用golang抓取bitcoin块的数据,程序编译后运行良好. 运行一段时间后报错bind: An operation on a socket could n ...
- An operation on a socket could not be performed because the system lacked sufficient buffer space or
dkron (dkron 是一个定时任务执行系统,可以将所有的定时任务写成接口形式,用这个定时任务系统统一管理)定时任务所有的定时任务都不执行了,启动不了,查看日志报错: An operation o ...
- Golang使用协程通过Socket实现客户端向服务端发送数据,服务端接收数据
一.服务端代码: package mainimport("fmt""net" )func process(conn net.Conn) {//延迟关闭目前连接d ...
- Socket:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
最近服务器的Socket代理软件经常报这个错误: log:Error On : 2013-5-17 0:01:00 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作. 在 System.Net ...
- Linux 网络编程socket错误分析
socket错误码: EINTR: 4 阻塞的操作被取消阻塞的调用打断.如设置了发送接收超时,就会遇到这种错误. 只能针对阻塞模式的socket.读,写阻塞的socket时,-1返回,错误号为INTR ...
- linux socket错误提示errno分析
参考链接:http://aigo.iteye.com/blog/1911134 参考链接:https://baike.baidu.com/item/errno/11040395?fr=aladdin ...
- Windows Sockets 错误码及出错原因
From: http://blog.csdn.net/mjay1234/article/details/7684316 Windows Sockets在头文件winsock.h中定义了所有的错误码,它 ...
- java.net.BindException: Address already in use解决方法
在网络编程中,特别是在短时间内new的网络连接太多,经常出现java.net.BindException: Address already in use: JVM_Bind的异常,网络有很多介绍此异常 ...
- 程序网络访问出错:lacked sufficient buffer space
为什么80%的码农都做不了架构师?>>> 之前在用Go语言做一个批量程序时出现在下错误 dial tcp 127.0.0.1:80: An operation on a soc ...
最新文章
- Cobbler部署指南之Cobbler安装操作系统篇
- linuxquot;/quot;分区名称,linux分区,磁盘系统的管理,文件系统制作
- 月薪5K的运维小白如何成为月薪5W的高级架构师?
- MySQL探秘(六):InnoDB一致性非锁定读(隔离性)
- 第2课 桐桐的运输方案《聪明人的游戏 信息学探秘.提高篇》
- MyBatis复习(九):MyBatis整合C3P0连接池
- Globe宣布将在Balancer拍卖14,000,000枚GDT代币
- Java定时器每小时执行一次
- 网上购物与开店赢家随身查
- python工具包: pandas
- ant design-Table中的分页实现(包括点击跳页,输入跳页,以及指定每页项目数)
- python长度单位换算表_长度单位换算表大全
- 2019当今互联网赚钱的六大方式,赠送给迷茫的网赚新手
- 全天星图应用软件介绍(四季星座VB6源码)
- prgrmz的作品集
- 最新Win10离线安装.NET Framework 3.5的方法(不需要离线包,只需原版系统安装包,亲测完美快捷有效)
- druid.io index_realtime任务的hand off:仍然是源码+log说清楚
- Tensorflow2.3用SaveModel保存训练模型.pb等文件+opencvino转IR文件
- 传递给窗口过程函数的lParam参数指针
- 拥抱新技术?你需要考虑的方面
热门文章
- 空间点过程与随机测度(二):测度的故事
- speedoffice如何在Word文档中输入美元符号
- Mac 锦囊 —— 误删除admin组之后
- 《Python Excel 教程》
- vac服务器未响应,csgo国服游戏停止工作、未响应的解决方法
- 《名侦探柯南》中的“IoT恐袭”
- 如何在 Matplotlib 中绘制垂直线
- 25.有5个人做在一起, 问第五个人多少岁? 他说比第四个人大2岁. 问第四个人岁数, 他说比第是三个人大2岁. 问第三个人, 又说比第二人大两岁. 问第二个人, 说比第一个人大两岁. 最后问第一个人
- redis IO模型的演进
- 云计算学习笔记1——并行计算