pythonsockets:确保在关闭连接之前发送了TCP包

2024-04-19 01:46:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个通过TCP控制的中继。据我所知,以下代码应该有效:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.0.200', 17494))
s.send(chr(101))
s.close()

但是,我注意到,在实际发送包之前,套接字就被关闭了,而中继什么也不做。作为肮脏的解决方案,我现在在关闭连接之前放置了一个sleep语句,它可以正常工作。在

^{pr2}$

有没有更聪明的方法可以确保在关闭连接之前包被实际发送?在


Tags: 代码sendclosestreamconnectsleepsocket语句
1条回答
网友
1楼 · 发布于 2024-04-19 01:46:04

您可以使用s.setsockopt设置sou-LINGER选项。linger选项使套接字等待(内部)并仅在发送所有挂起的数据到指定的超时值后关闭。比如:

linger_enabled = 1
linger_time = 10 #This is in seconds.
linger_struct = struct.pack('ii', linger_enabled, linger_time)
s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, linger_struct)

相关问题 更多 >