О recv и буфере чтения - Сокеты Berkeley C

Я использую сокеты Berkeley и TCP (сокеты SOCK_STREAM).

Процесс таков:

  1. Я подключаюсь к удаленному адресу.
  2. Я отправляю ему сообщение .
  3. Я получаю от него сообщение.

Представьте, что я использую следующий буфер:

char recv_buffer[3000];
recv(socket, recv_buffer, 3000, 0);

Вопросы:

  • Как я могу узнать, пуст ли после первого вызова recv буфер чтения или нет? Если он не пустой, мне придется снова вызвать recv, но если я сделаю это, когда он пуст, он будет заблокирован на долгое время.
  • Как я могу узнать, сколько байтов я прочитал в recv_buffer? Я не могу использовать strlen, потому что получаемое мной сообщение может содержать нулевые байты.

Спасибо.

9
задан NeDark 6 December 2010 в 01:37
поделиться