몇 가지 TCP 연결을 처리하는 드라이버가 있습니다.장치 드라이버에서 select()/poll() 사용
struct sock
님의 목록이있는 커널에서 사용자 공간 응용 프로그램 api의/poll()/epoll()을 (를) 선택하는 것과 유사한 방법을 사용할 수 있습니까?
감사
몇 가지 TCP 연결을 처리하는 드라이버가 있습니다.장치 드라이버에서 select()/poll() 사용
struct sock
님의 목록이있는 커널에서 사용자 공간 응용 프로그램 api의/poll()/epoll()을 (를) 선택하는 것과 유사한 방법을 사용할 수 있습니까?
감사
kernel_select()
를 호출하는 사용자 정의
sk_buff
핸들러를 작성 할 수 있습니다
. 이미 커널 측에이 링크 Simulate effect of select()
and poll()
in kernel socket programming
를 통과 한 경우
없음이 명백한 sys_epoll()
인터페이스를 사용하지 않는 것이 쉽게 확인합니다. 결국, 커널 개체에 직접 액세스 할 수 있기 때문에 후프를 뛰어 넘을 필요가 없습니다.
각 file
개체가 포함되어 있으며 file_operations
"vtable"의 폴 방법을 "재정의"합니다. 모든 소켓 주위를 반복 할 수 있으며, 각각에 ->poll()
을 호출하고 주기적으로 또는 사용 가능한 데이터가 없을 때 산출 할 수 있습니다.
소켓의 트래픽이 너무 많으면 이보다 더 많은 것이 필요하지 않습니다.
는 API에 대한 참고 사항 : 당신이 그것을 기다릴하지 않으려는하지만 경우
poll()
방법은하는 poll_table()
인수가 필요합니다, 그것은 안전하게 null로 초기화 할 수 있습니다 :
poll_table pt;
init_poll_funcptr(&pt, NULL);
...
// struct socket *sk;
...
unsigned event_mask = sk->ops->poll(sk->file, sk, &pt);
하는 경우 기다리고 싶다면 poll_table
으로 설정된 콜백으로 init_poll_funcptr()
으로 놀아 라.
이 링크를 이미 통과했는지 확실하지 않은 경우 http://stackoverflow.com/questions/11336034/simulate-effect-of-select-and-poll-in-kernel-socket-programming – askb
@askb 대답으로 받아 들일 것입니다. – dimba
은 (는) 업데이트되었습니다. – askb