导航:首页 > 编程语言 > python关闭socket

python关闭socket

发布时间:2025-08-26 05:35:57

‘壹’ linux python socket怎么去除

原因是server端关掉了tcp连接,给client发送FIN信号,client的tcp层回了ACK,然后它的socket状态就处于close_wait状态。

实验:

Python中,socket在send之前处于close_wait状态,那么该send不会报错,并且执行完之后socket就closed了。再继续调用send就会报错。


推理:

说明python的socket.send在发送数据之前会检查socket的状态,如果处于close_wait,就执行close(socket)(应用层感觉不到哦),然后正常退出。所以再次send时,会抛出异常。


为什么会一直处close_wait状态?

当socket处于close_wait时,必须由应用层调用close(socket),发送FIN给server端才能变为LAST_ACK,接收到server端回应的ACK后,才变为CLOSED。如果应用层不调用close(),那么socket会一直处于close_wait。[1]


如果我在python中不断循环去调用socket.sendall(),那么在socket变为close_wait后,通过socket.sendall()也会关闭socket,为什么它还是一直处在close_wait状态呢?

原因在于当sendall(data)的data比较大,在data被发送一半时,连接被server端断掉了。那么sendall(data)会一直卡在那,也就不会执行到sendall的开始处,去判断socket状态,确定是否关闭socket了。

简单而言,就是socket在变为close_wait之后,根本没有调用sendall()去关闭socket。


阅读全文

与python关闭socket相关的资料

热点内容
媒体文化pdf 浏览:248
linuxmysql数据库目录 浏览:310
命令方块做水上鞋 浏览:551
python中可迭代的数列怎么写 浏览:70
python中geos安装 浏览:962
将命令方块替换成空气 浏览:415
美德书中央编译出版社pdf 浏览:455
真封神命令 浏览:295
linux命令实例 浏览:700
如何取消服务器的密码是什么原因 浏览:573
php表格制作 浏览:408
液体的压缩性 浏览:453
防sql注入方法python 浏览:269
只有我可以命令 浏览:795
动态编译免费版 浏览:706
连夜抢修缺陷即是命令 浏览:484
为什么域名必须有服务器 浏览:652
android应用开发书籍 浏览:412
卸载源码编译 浏览:896
世界争霸怎么在服务器里 浏览:350