티스토리 뷰
소스코드
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을 참조하길래 추가해서 돌려봤는데 문제없이 잘 돌아간다.
참고
'Programming > Python' 카테고리의 다른 글
[subprocess] subprocess.Popen 좀비 프로세스(defunct) 이슈 (0) | 2023.05.19 |
---|---|
[unpack] little endian으로 문자열 unpack (0) | 2019.07.08 |
[Mac] import weakref 오류 (0) | 2018.09.14 |
[Python] RAW Socket (0) | 2018.07.18 |
idapython 스크립트 모음 (0) | 2018.06.26 |
댓글