Мы знаем, что если мы используем необработанный сокет, нам нужно обрабатывать все, включая буфер.
если мы использовать необработанный сокет, мы можем использовать следующий вызов:
Код: Выделить всё
recvfrom();
recvmsg();
Код: Выделить всё
recvfrom(sockfd,buffer,sizeof(buffer),&sock_addr,&size_sock_addr)
Мой вопрос:
(1). Означает ли это, что когда мы вызываем Recv, Recvfrom, Recvmsg, мы фактически копируем данные из буфера Nic в буфер основной памяти?
(2). Я буду использовать пример:
Код: Выделить всё
buffer[3000];
recvfrom(sockfd,buffer,sizeof(buffer),&sock_addr,&size_sock_addr);
Я буду использовать представление массива для представления кольцевого буфера:
Код: Выделить всё
Ring_Buffer[2] = {packet_1,packet_2};
Мы вызвали Recvfrom() и теперь мы поместим пакет_1 в буфер, и теперь указатель чтения будет перемещен к следующему индексу, поэтому всякий раз, когда мы снова вызываем Recvfrom, мы по сути помещаем пакет_2 в буфер
Так же происходит, когда мы используем Recvfrom или Recvmsg приведет к перемещению указателя чтения в кольцевом буфере?
Подробнее здесь: https://stackoverflow.com/questions/793 ... raw-socket
Мобильная версия