Programming/Python
[socket] select 인자로 class object 사용하는 법
Tribal
2020. 10. 19. 11:07
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import socket, select
class SimpleServer(object):
def __init__(self, host='0,0,0,0', port):
self.host = host
self.port = port
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind((self.host, self.port))
self.sock.listen(5)
def run(self):
try:
c_sock, (ip, port) = self.sock.accept()
except:
return None
# for select
def fileno(self):
return self.sock.fileno()
if __name__ == '__main__':
s = SimpleServer(port=31337)
l = [s]
while True:
r_socks, w_socks, e_socks = select.select(l, [], [], 10)
# run...
for sock in r_socks:
pass
|
cs |
핵심 부분은 20번째 줄의 fileno 함수이다. 별도로 처리할 내용이 없다면, object 내부의 socket의 fileno을 호출해서 반환해주면 된다.
select.select로 object를 대충 만들어서 socket 대신 넣고 실행해보니 int나 fileno을 참조하길래 추가해서 돌려봤는데 문제없이 잘 돌아간다.
참고