TCP 소켓에서 데이터를 가져 오는 Linux에서 인터페이스를 작성하고 있습니다. 사용자는 수신 된 데이터가 저장된 버퍼를 제공합니다. 제공된 버퍼가 작 으면 오류 만 반환하려고합니다. 첫 번째 문제는 버퍼가 작아야하는지 확인하는 것입니다. recv() 함수는 버퍼에 실제로 기록 된 바이트 양을 반환합니다. recv() 맨 페이지에 명시된 MSG_TRUNC 플래그를 사용하면 여전히 동일한 결과를 반환합니다. 두 번째 문제는 여전히 소켓에 대기중인 데이터를 삭제하는 것입니다. 따라서 제공된 버퍼가 작다고 결정하면 소켓에 남아있는 모든 것을 지우고 싶습니다. 소켓을 다시 닫고 열거 나 아무것도 남지 않을 때까지 수신하는 것 외에는 다른 방법이 있습니까? 베스트 감사 매뉴얼 페이지에 설명 된대로소켓에 데이터가 남아 있는지 확인한 후 폐기하십시오.
토비
[tcp (7) 맨 페이지] (http://man7.org/linux/manage/man7/tcp.7.html)에 따르면 : "* 2.4 버전부터는 리눅스가' 'recv (2)'(및'recvmsg (2)')의'flags' 인수에서'MSG_TRUNC'를 호출합니다.이 플래그는 데이터의 수신 된 바이트를 호출자가 제공 한 버퍼로 되 돌리는 것이 아니라 버려지게합니다. 2.4.4,'MSG_TRUNC'는 또한 'MSG_OOB'와 함께 사용되어 대역 외 데이터를 수신 할 때이 효과를 갖는다. * " –