ioctl() для программирования сокетов на C

#c #sockets #ioctl

#c #сокеты #ioctl

Вопрос:

Я использую ioctl() для считывания количества символов в моем буфере в программе сокета. Однако иногда, когда заполнение буфера задерживается, ioctl() неверно интерпретирует его как конец сообщения. Как этого можно избежать, если бы я использовал ioctl(), чтобы узнать длину моего входящего сообщения. Также я не знаю размер сообщения, которое я получу, следовательно, я не смогу получить его в статическом буфере recv() .

Спасибо, Manoj

Комментарии:

1. Используете ли вы потоки или дейтаграммы в своих сокетах?

Ответ №1:

Сделайте размер сообщения частью сообщения, предпочтительно в начальных байтах. ie делает первые 2 байта размером остальной части сообщения. Таким образом, вы знаете, что вам нужно подождать, пока не будут прочитаны 2 прочитанных байта, а затем прочитать размер сообщения.