python3 网络编程-socket错误OEError: [Errno 48] Address alrea
在TCP重启服务端会遇到OEError: [Errno 48] Address already in use 问题原因: ????这个是由于你的服务端仍然存在四次挥手的time_wait状态在占用地址 ????(如果不懂,请深入研究 ????????1.tcp三次握手,四次挥手? ????????2.syn洪水攻击? ????????3.服务器高并发情况下会有大量的time_wait状态的优化方法) 解决方法代码示例: ????加入一条socket配置,重用ip和端口: phone=socket(AF_INET,SOCK_STREAM) phone.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)?#就是它,在bind前加 phone.bind(('127.0.0.1',8080)) ????发现系统存在大量TIME_WAIT状态的连接,通过调整linux内核参数解决 vi?/etc/sysctl.conf 编辑文件,加入以下内容: net.ipv4.tcp_syncookies?=?1net.ipv4.tcp_tw_reuse?=?1net.ipv4.tcp_tw_recycle?=?1net.ipv4.tcp_fin_timeout?=?30 ?然后执行?/sbin/sysctl?-p?让参数生效。 ? net.ipv4.tcp_syncookies?=?1?表示开启SYN?Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse?=?1?表示开启重用。允许将TIME-WAIT?sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle?=?1?表示开启TCP连接中TIME-WAIT?sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_fin_timeout?修改系统默认的?TIMEOUT?时间 更多内容: ????python3:一个简单socket 服务端和客服端示例 ????python3:一个简单并发socket 服务端和客服端示例 ????python3 网络编程-网络协议理论 ????python3 网络编程-socket理论 ????python3 网络编程-socket错误OEError: [Errno 48] Address already in use ????python3 网络编程-socket中recv与recvfrom的区别 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |