Nic-буфер в необработанном сокетеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Nic-буфер в необработанном сокете

Сообщение Anonymous »

Я новичок в необработанных сокетах.
Мы знаем, что если мы используем необработанный сокет, нам нужно обрабатывать все, включая буфер.
если мы использовать необработанный сокет, мы можем использовать следующий вызов:

Код: Выделить всё

recvfrom();
recvmsg();
Предположим, я использую вызов Recvfrom()

Код: Выделить всё

recvfrom(sockfd,buffer,sizeof(buffer),&sock_addr,&size_sock_addr)

Когда данные поступают из сети, они помещаются в буфер Nic.
Мой вопрос:
(1). Означает ли это, что когда мы вызываем Recv, Recvfrom, Recvmsg, мы фактически копируем данные из буфера Nic в буфер основной памяти?
(2). Я буду использовать пример:

Код: Выделить всё

buffer[3000];
recvfrom(sockfd,buffer,sizeof(buffer),&sock_addr,&size_sock_addr);

Предположим, моя сетевая карта использует дизайн кольцевого буфера, а размер кольцевого буфера моей сетевой карты составляет 3000 байт, и я получаю 2 пакета, и каждый пакет имеет размер 1500 байт. >
Я буду использовать представление массива для представления кольцевого буфера:

Код: Выделить всё

Ring_Buffer[2] = {packet_1,packet_2};
мы вызвали Recvfrom, Recvmsg, что означает, что мы пытаемся прочитать данные из сетевого адаптера в буфер оперативной памяти.
Мы вызвали Recvfrom() и теперь мы поместим пакет_1 в буфер, и теперь указатель чтения будет перемещен к следующему индексу, поэтому всякий раз, когда мы снова вызываем Recvfrom, мы по сути помещаем пакет_2 в буфер
Так же происходит, когда мы используем Recvfrom или Recvmsg приведет к перемещению указателя чтения в кольцевом буфере?

Подробнее здесь: https://stackoverflow.com/questions/793 ... raw-socket
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»