리눅스에서 유닉스 소켓 API를 사용하면, 하나의 UDP 패킷과 단 하나의 UDP 패킷을 읽게 할 수있는 방법이 있습니까? 현재 recvmsg를 사용하여 비 차단 소켓에서 패킷을 읽는 중입니다. 버퍼 크기는 내부 네트워크의 MTU보다 약간 큽니다. 이렇게해야 항상 전체 UDP 패킷을받을 수 있지만 패킷이 작 으면 recvmsg 호출 당 둘 이상의 패킷을 수신하지 못할 것이라고 확신 할 수는 없습니다.정확히 하나의 UDP 패킷을 소켓에서 읽을 수 있습니까?
recvmsg 매뉴얼 페이지는 버퍼가 채워질 때까지 대기를 시도하는 MSG_WAITALL 옵션을 참조합니다. 우리는 이것을 사용하지 않고있다. 그래서 그것은 하나의 데이터 그램이 읽힌 후에 recvmsg가 항상 리턴한다는 것을 의미 하는가? 이것을 보장 할 방법이 있습니까?
이상적으로는 유닉스 계열의 솔루션을 원합니다. 그러나 존재하지 않는다면 리눅스에 특정한 것이 있습니까?
MSG_WAITALL은 스트림 지향 소켓 용입니다. http://linux.die.net/man/3/recvmsg 이미 응답 한대로 recv/send()는 데이터 그램 지향 소켓에 대해 전체 데이터 그램을 사용하여 작동합니다. – Ioan