我从UDP Mulitcast套接字接收数据报:
int res=recvfrom(socketId,buf,sizeof(char) * RECEIVE_BUFFER_SIZE,0, (SOCKADDR *)& Sender, &SenderAddrSize);
根据MSDN,此调用将阻塞,直到数据报可用:
如果套接字上没有可用的传入数据,则recvfrom函数会阻塞并等待数据到达,这是根据为WSARecv定义的阻塞规则而未设置MSG_PARTIAL标志,除非套接字是非阻塞的。
现在在同一个线程中我也希望从另一个套接字接收数据包。所以现在我想在一个线程中听两个套接字,并且应该尽快处理来自它们的数据。因为我不能再使用阻塞recvfrom
,我应该使用类似的东西(pseude-code):
while (true) {
non blocking recvfrom call to Socket1
if new datagram available in Socket1 then process
non blocking recvfrom call to Socket2
if new datagram available in Socket2 then process
}
我会说我“旋转”插座。我知道“旋转”会占用很多CPU,但这是可以的,因为我的主要要求是延迟。
我不想在两个不同的线程中处理两个套接字,因为来自这些套接字的数据是相同的,并且从两个线程“合并”这些数据有点复杂 - 从“仲裁”数据更容易一个线程中有两个套接字。我必须听两个套接字,因为UDP不可靠,我需要在统计上减少丢包的可能性。
我有以下问题: