Я использую сокеты Berkeley и TCP (сокеты SOCK_STREAM).
Процесс таков:
- Я подключаюсь к удаленному адресу.
- Я отправляю ему сообщение .
- Я получаю от него сообщение.
Представьте, что я использую следующий буфер:
char recv_buffer[3000];
recv(socket, recv_buffer, 3000, 0);
Вопросы:
- Как я могу узнать, пуст ли после первого вызова recv буфер чтения или нет? Если он не пустой, мне придется снова вызвать recv, но если я сделаю это, когда он пуст, он будет заблокирован на долгое время.
- Как я могу узнать, сколько байтов я прочитал в recv_buffer? Я не могу использовать strlen, потому что получаемое мной сообщение может содержать нулевые байты.
Спасибо.
задан NeDark 6 December 2010 в 01:37
поделиться