Я хочу получать данные из сокета без указания буфера.
Извините, но это просто невозможно. Вы должны предоставить буфер для приема байтов. Если вы не хотите использовать байты, просто отбросьте буфер после того, как вы его прочитали.
Я просто хочу удалить x байтов из буфера входящих данных.
Для этого нет API. Вы должны прочитать байты в действительном буфере. То, что вы делаете с этим буфером, зависит от вас.
, когда я выполняю код выше возвращаемого значения recv()
является SOCKET_ERROR
и WSAGetLastError()
возвращается WSAECONNABORTED
.
Я бы предпочел WSAEFAULT
.
Невозможно ли использовать функцию приема для удаления данных из буфера RX сокета?
Несомненно, это возможно. Вы просто должны прочитать байты в буфер, даже если это всего лишь временный буфер, например:
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);
Где это говорит о том, что указатель буфера может быть пустым? – EJP
Нигде. Но я думал, что это возможно, потому что это возможно в других библиотеках сокетов. –
Я не знаю таких библиотек, но в любом случае это * non sequitur. * – EJP