recvfrom을 통해 패킷의 일부를 받으려고합니다. 실제로 다음과 같이 작동recvfrom (UDP)을 통해 패킷의 일부를 수신합니다.
recvfrom(sockfd, serialised_meta, 12, flags, src_addr, addrlen);
recvfrom(sockfd, serialised_buf, BUFLEN, flags, src_addr, addrlen);
데이터는 다음과 같이 전송됩니다
bufd->Serialise(serialised_buf, BUFLEN+12);
sendto(sockfd, serialised_buf, BUFLEN+12, flags, dest_addr, addrlen);
그래서 아이디어는 먼저 몇 가지 메타 데이터를 읽고 다음 다른 뭔가를받을 것인지 여부를 결정하는 것입니다. 문제는 두 번째 버퍼 (serialised_buf)가 처음에 4 '/ 0'바이트를 수신한다는 것입니다. 직렬화 문제가 아닌 것 같아요. 전에 직렬화를 사용했고, 모든 패킷 (메타 및 데이터)을 즉시 수신하는 동안 모든 것이 멋졌습니다. 수정 방법에 대한 아이디어가 있으십니까?
추신. 나는 불필요한 바이트를 건너 뛸 수 있음을 이해한다.)하지만 어쨌든, 왜 그런 일이 일어 났을 까?
그렇다면 내 솔루션이 어떻게 작동할까요? 그것은 호기심에서 벗어난 것입니다.) 패킷의 나머지 부분이 버려지면 두 번째 recvfrom 작동해야합니다. 미리 감사드립니다. 그리고 지금, 메타를 먼저 얻는 가장 좋은 방법은 픽 플래그를 사용하는 것입니다. – Roman
패킷 길이에 대해서 이야기하고 있다면,'FIONREAD'와 함께'ioctl'을 사용하여 패킷 길이를 결정할 수 있습니다. 'MSG_PEEK'을 사용할 수는 있지만 패킷 데이터가 크고 메타가 작지 않으면 귀찮게하지 않을 것입니다 ... 아마도'ioctl'을 건너 뛰고 최대 버퍼 크기를 갖는 것이 가장 좋습니다 (애플리케이션에 대해) 가서 데이터를 건너 뛰거나 버리십시오. – mark