저는 단방향 (단방향 전송) 또는 양방향 모드 (양방향)에서 작동 할 수있는 링크를 통해 발신자에서 수신자로 데이터를 전송하는 응용 프로그램을 보유하고 있습니다. 단방향 모드에서 응용 프로그램은 UDP를 사용하여 데이터를 전송하고 양방향에서는 TCP를 사용합니다. TCP 소켓에 쓰기가 차단 될 수 있으므로 Non Blocking IO (FIONBIO-O_NONBLOCK의 ioctl 및 fcntl은이 배포에서 지원되지 않음)와 select() 시스템 호출을 사용하여 데이터를 쓸 수있는시기를 결정합니다. NIO는 네트워크 상태가 악화되면 필요하다면 타임 아웃 후 조기에 전송을 중단 할 수 있도록 사용됩니다. 나는 동일한 기본 코드를 사용하여 전송을하고 싶지만 더 높은 추상화에서 TCP/UDP를 변경하십시오. 이 기능은 TCP에 유용합니다.요청한 것보다 적은 바이트로 Non Blocking UDP 쓰기가 반환 될 수 있습니까?
그러나 UDP 소켓에 대해 Non Blocking IO가 작동하는 방식에 대해 우려하고 있습니다. 매뉴얼 페이지를 잘못 읽었을 수도 있지만, write()가 요청한 것보다 적은 바이트 수를 보낸다고 반환 할 수 있기 때문에 클라이언트가 데이터 그램에서 더 적은 바이트를 수신하게됩니까? 주어진 데이터 버퍼를 보내려면 블로킹되지 않는 IO를 사용하고 있기 때문에 여러 번 쓰기가 필요할 수 있습니다. 나는 이것이 클라이언트에 의해 수신 된 여러 개의 UDP 데이터 그램으로 변환 될 것을 우려하고있다.
나는 소켓 프로그래밍에 대해 상당히 새로운 것이므로 약간의 오해가 있다면 여기에 대해 용서해주십시오. 고맙습니다.
작업하려는 시스템의 세부 정보를 확인하고 싶을 수 있습니다. UDP 스택에는 특정 제한이있을 수 있습니다 (실제로 이미 언급 한 것처럼). – geekosaur