此处只做记录,不做分析。
// 代码1
int timeout = 5000;
if(setsockopt(m_responseSocket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof(timeout)) < 0){
std::cerr << "setsockopt failed" << std::endl;
closesocket(m_responseSocket);
return;
}
// 代码2
struct timeval timeout;
timeout.tv_sec = 5;
timeout.tv_usec = 0;
if(setsockopt(m_responseSocket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof(timeout)) < 0){
std::cerr << "setsockopt failed" << std::endl;
closesocket(m_responseSocket);
return;
}
同样的recvfrom.
int bytesReceived = ::recvfrom(m_responseSocket, buffer.data(), sizeof(buffer), 0, (sockaddr*)&fromAddr, &fromAddrLen);
if(bytesReceived < 0){
std::cerr << "recvfrom failed: " << WSAGetLastError() << std::endl;
continue;
}
但是 代码1 是正常的,每隔5s重新continue。
代码2 只有首次是等待5s,之后不会再阻塞,会直接返回。
错误码都是 10060。