|
@@ -4,11 +4,19 @@ from typing import List, Tuple
|
|
import socket
|
|
import socket
|
|
import asyncio
|
|
import asyncio
|
|
from asyncio import AbstractEventLoop
|
|
from asyncio import AbstractEventLoop
|
|
|
|
+import logging
|
|
|
|
|
|
|
|
|
|
async def echo(connection: socket, loop: AbstractEventLoop) -> None:
|
|
async def echo(connection: socket, loop: AbstractEventLoop) -> None:
|
|
- while data := await loop.sock_recv(connection, 1024):
|
|
|
|
- await loop.sock_sendall(connection, data)
|
|
|
|
|
|
+ try:
|
|
|
|
+ while data := await loop.sock_recv(connection, 1024):
|
|
|
|
+ if data == b'q':
|
|
|
|
+ raise Exception('Неожиданая ошибка сети')
|
|
|
|
+ await loop.sock_sendall(connection, data)
|
|
|
|
+ except Exception as ex:
|
|
|
|
+ logging.exception(ex)
|
|
|
|
+ finally:
|
|
|
|
+ connection.close()
|
|
|
|
|
|
|
|
|
|
async def listen_for_connections(server_socket: socket, loop: AbstractEventLoop):
|
|
async def listen_for_connections(server_socket: socket, loop: AbstractEventLoop):
|
|
@@ -19,6 +27,19 @@ async def listen_for_connections(server_socket: socket, loop: AbstractEventLoop)
|
|
asyncio.create_task(echo(connection, loop))
|
|
asyncio.create_task(echo(connection, loop))
|
|
|
|
|
|
|
|
|
|
|
|
+async def main():
|
|
|
|
+ server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
+ server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
|
|
+
|
|
|
|
+ server_address = ('127.0.0.1', 8000)
|
|
|
|
+ server_socket.setblocking(False)
|
|
|
|
+ server_socket.bind(server_address)
|
|
|
|
+ server_socket.listen()
|
|
|
|
+
|
|
|
|
+ await listen_for_connections(server_socket, asyncio.get_event_loop())
|
|
|
|
+ # asyncio.run(main())
|
|
|
|
+
|
|
|
|
+
|
|
def foo():
|
|
def foo():
|
|
|
|
|
|
selector = selectors.DefaultSelector()
|
|
selector = selectors.DefaultSelector()
|
|
@@ -52,18 +73,6 @@ def foo():
|
|
print(f"Получены данные: {data}")
|
|
print(f"Получены данные: {data}")
|
|
event_socket.send(data)
|
|
event_socket.send(data)
|
|
|
|
|
|
-async def main():
|
|
|
|
- server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
- server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
|
|
-
|
|
|
|
- server_address = ('127.0.0.1', 8000)
|
|
|
|
- server_socket.setblocking(False)
|
|
|
|
- server_socket.bind(server_address)
|
|
|
|
- server_socket.listen()
|
|
|
|
-
|
|
|
|
- await listen_for_connections(server_socket, asyncio.get_event_loop())
|
|
|
|
- asyncio.run(main())
|
|
|
|
-
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if __name__ == '__main__':
|
|
- main()
|
|
|
|
|
|
+ asyncio.run(main())
|