Можно ли определить, почему сокет закрылся в Python, т.е. отправила ли другая сторона FIN или RST?
Единственный известный мне способ определить, имеет ли другая сторона senta FIN или RST, это чтение из сокета, и если вы получите пустую (байтовую) строку, то мы получили либо FIN, либо RST. Но как узнать какой?
import asyncio
import socket
async def async_main(loop):
server_sock = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM,
proto=socket.IPPROTO_TCP)
server_sock.setblocking(False)
server_sock.bind(('', 8080))
server_sock.listen(socket.IPPROTO_TCP)
loop = asyncio.get_event_loop()
sock, adddress = await loop.sock_accept(server_sock)
while True:
data = await loop.sock_recv(sock, 1024)
if data == b'':
# Socket closed, but how?
break
print(data)
loop = asyncio.get_event_loop()
loop.run_until_complete(async_main(loop))