Ich möchte Daten von einem Socket empfangen, ohne einen Puffer anzugeben.
Sorry, aber das ist einfach nicht möglich. Sie müssen einen Puffer bereitstellen, um die Bytes zu empfangen. Wenn Sie die Bytes nicht verwenden möchten, verwerfen Sie einfach den Puffer, nachdem Sie ihn eingelesen haben.
Ich möchte nur x Bytes aus dem eingehenden Datenpuffer entfernen.
Es gibt keine API dafür. Sie müssen die Bytes in einen gültigen Puffer lesen. Was Sie danach mit diesem Puffer tun, liegt an Ihnen.
, wenn ich den Code über dem Rückgabewert von recv()
ausführen SOCKET_ERROR
und WSAGetLastError()
kehrt WSAECONNABORTED
ist.
Ich hätte stattdessen WSAEFAULT
erwartet.
Ist es nicht möglich, die Empfangsfunktion zum Entfernen von Daten aus dem RX-Puffer der Buchse zu verwenden?
Sicher ist es möglich. Sie müssen einfach nur die Bytes in einen Puffer lesen, auch wenn es nur ein temporärer Puffer, zB:
int ignoreBytes(SOCKET sock, int numBytes)
{
u_char buf[256];
while (numBytes > 0)
{
int numRead = recv(sock, (char*)buf, min(sizeof(buf), numBytes), 0);
if (numRead <= 0)
return numRead;
numBytes -= numRead;
}
return 1;
}
ignoreBytes(gSocket, userDataLength);
Wo es nicht sagen, dass der Pufferzeiger null sein kann? – EJP
Nirgendwo. Aber ich dachte, es ist möglich, weil es auf anderen Socket-Bibliotheken möglich ist. –
Ich kenne keine solchen Bibliotheken, aber in jedem Fall ist das ein * nicht sequitur. * – EJP