티스토리 뷰

소스코드

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을 참조하길래 추가해서 돌려봤는데 문제없이 잘 돌아간다.

 

참고

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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