문제

IOCTL (Fionread)을 사용하여 Linux의 원시 소켓 수신 버퍼의 보류중인 옥트 수를 결정한 다음 RECV를 호출하는 구현이 있습니다.

Linux의 원시 소켓에 대한 IOCTL 인터페이스가 실제로 실제 보류중인 옥제를 반환하지 않는 곳을 읽었습니다. 이 올바른지?

나는 매번 몇 가지 메시지를 잃어버린 다음 높은 부하로 어디로 가고 있는지, 지금까지 어디에서 찾을 수 없었기 때문에 묻습니다. 원시 소켓에서 보류중인 옥넷 수를 파악하는 더 좋은 방법입니다.

도움이 되었습니까?

해결책

애플리케이션이 패킷 속도를 따라 잡을 수 없으면 (커널 버퍼가 생겨나지 않기 때문에) 커널이 패킷을 떨어 뜨릴 가능성이 항상 있습니다.

BTW, 어쨌든 옥넷 수를 알아야하는 이유는 무엇입니까? 이들은 패킷 소켓이므로 패킷의 길이는 항상 네트워크 인터페이스의 최대 프레임 크기에 의해 제한되므로 충분히 큰 버퍼를 Recv로 전달하십시오.

성능이 중요하다면 packet_mmap Linux 지원.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top