Handle large SSDP responses better

This commit is contained in:
Cameron Gutman
2018-11-07 17:35:46 -08:00
parent 852ee8df8d
commit 2ba42e6dd5
+7 -2
View File
@@ -70,12 +70,17 @@ struct UPNPDev* getUPnPDevicesByAddress(IN_ADDR address)
u_long mode = 1; u_long mode = 1;
ioctlsocket(s, FIONBIO, &mode); ioctlsocket(s, FIONBIO, &mode);
char responseBuffer[1024]; char responseBuffer[2048];
struct UPNPDev* deviceList = nullptr; struct UPNPDev* deviceList = nullptr;
for (;;) { for (;;) {
int bytesRead = recv(s, responseBuffer, sizeof(responseBuffer) - 1, 0); int bytesRead = recv(s, responseBuffer, sizeof(responseBuffer) - 1, 0);
if (bytesRead == SOCKET_ERROR) { if (bytesRead == SOCKET_ERROR) {
if (WSAGetLastError() != WSAEWOULDBLOCK) { if (WSAGetLastError() == WSAEMSGSIZE) {
// Skip packets larger than our buffer
printf("recv() message too large\n");
continue;
}
else if (WSAGetLastError() != WSAEWOULDBLOCK) {
printf("recv() failed: %d\n", WSAGetLastError()); printf("recv() failed: %d\n", WSAGetLastError());
} }
break; break;