🔥

【Python】HTTP/1 クライアントに epoll を使う

に公開
import socket, select

HOST = '127.0.0.1'
PORT = 8000

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.connect((HOST, PORT))
sock.setblocking(0)
sock.send(b'GET / HTTP/1.1\r\n\r\n')

epoll = select.epoll()
epoll.register(sock.fileno(), select.EPOLLIN)

response = b''

while(True):
    events = epoll.poll()

    for fileno, event in events:
        if event & select.EPOLLIN:
            data = sock.recv(1024)
            if data:
                response += data
            else:
                break
    else:
        continue
    break

print(response.decode())

epoll.unregister(sock.fileno())
epoll.close()
sock.close()

Discussion