0
리눅스에서는 FIONREAD
과 함께 ioctl
호출을 사용하여 다음 UDP 패킷의 바이트 수를 얻을 수 있습니다.BSD 플랫폼에서 다음 UDP 데이터 그램의 크기를 결정 하시겠습니까?
OSX에서는 작동하지 않으며 그 대신 SO_NREAD
과 함께 getsockopt
전화를 사용해야 패킷의 바이트 수를 확인할 수 있습니다.
BSD 플랫폼에서 동일한 결과를 얻기 위해 큰 버퍼에 엿보기 또는 읽기를 수행하는 것을 피할 수있는 방법이 있습니까?
필자가 알고 있듯이 전체 출력 버퍼의 바이트 수를 반환합니다 (헤더 포함). 아직 테스트 할 수 없지만 가까운 미래에 freebsd에서이 테스트를 수행 할 것입니다. – Matt
나는 약간의 시험을했고 여분의 memcpy와 함께 살기로 결정했다. 성능에는 무시할 수있는 차이가 있음이 밝혀졌습니다. 그러나 FIONREAD가 Linux와 동일한 방식으로 작동하는지 알고 싶어하는 사람을 위해 질문을 남겨 둘 것입니다. – Matt
"작동하지 않는다"는 의미입니다. MSG_PEEK | MSG_TRUNC를 사용하고 0의 버퍼 길이를 제공하거나, 그렇지 않으면 버퍼 길이를 제공 할 수 있습니다. 진짜 길이를 돌려 줄거야. – EJP