정기적 인 긴급 범위를 벗어나는 데이터를 수신 할 수있는 TCP 서버를 개발해야합니다. 나는 이것을 달성하기 위해 POCO C++ 라이브러리를 사용하고있다. StreamSocket 클래스의 (부족) 문서에서, 나는 이것이 달성하기 아주 쉬운 작업이 될 것을 참조 : 그렇게 같은) receiveBytes를 사용하는 경우합니다 (SO_OOBINLINE 플래그를 설정하여 방법을 수행해야합니다 :POCO C++을 사용하여 TCP 연결을 통해 OOB 데이터 보내기 및 수신
n = ss.receiveBytes(buffer, sizeof(buffer), SO_OOBINLINE);
나는 OOB를 보낼 때
ss1.sendUrgent(0xFF);
이를 테스트하기 위해, 나는 OOB 데이터를 전송하기 위해 "sendUrgent()"방법을 사용하는 매우 간단한 TCP 클라이언트 (또한 POCO 라이브러리를 사용하여) (1 바이트)했다 데이터, 아무 일도 일어나지 않습니다. 서버가이를 인식하지 못하는 것 같습니다.
반면에 sendBytes() 메서드를 사용하여 "normal"데이터를 보내면 SO_OOBINLINE 플래그가 StreamSocket에 설정된 경우 동일한 전송 된 데이터가 무한대로 수신됩니다. 아무도 그것을 재발송하지 않더라도).
무엇이 누락 되었습니까?
편집 : @ JimR의 제안과 this을 읽은 후, 나는 시도했다 :
n = ss.receiveBytes(buffer, sizeof(buffer), MSG_OOB);
그리고 심지어이 :
n = ss.receiveBytes(buffer, sizeof(buffer), SO_OOBINLINE | MSG_OOB);
는 모두 같은 예외를 발생 : 잘못된 인수를.
'SO_OOBINLINE'은 일반 읽기에서 OOB 데이터를 반환하도록 소켓에 지시합니다. –