<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Использование mmap() для получения/отправки через сокет]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=22677&amp;type=atom" />
	<updated>2012-06-07T11:31:47Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=22677</id>
		<entry>
			<title type="html"><![CDATA[Использование mmap() для получения/отправки через сокет]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=280366#p280366" />
			<content type="html"><![CDATA[<p>Есть сокет <br /></p><div class="codebox"><pre><code>fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))</code></pre></div><p>.<br />Предполагается сделать setsockopt с параметрами PACKET_TX_RING/PACKET_RX_RING, затем сделать mmap<br /></p><div class="codebox"><pre><code>rings = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)</code></pre></div><p> и писать в память напрямую, без использования write/recvfrom.</p><p>Как это реализуется? Точнее, как это работает? - Что выделяет в памяти setsockopt(..,..,PACKET_TX_RING,..,..)? Что делает mmap, если у сокета установлены оба PACKET_TX_RING и PACKET_RX_RING?<br />Например, читать таким образом пакеты (PACKET_RX_RING) я научился, а и читать и писать - нет. Можно ли это сделать на одном сокете, или надо два? Сколько вызовов mmap нужно сделать - один или два, или по одному на оба сокета?.. Как работать с одним кольцом, если в нем и tx пакеты, и rx пакеты? Возможно ли писать в память+recvfrom или write+читать из памяти?<br />Внятной документации о том, как это работает, не нашел (плохо искал?)</p><p>Заранее прошу прощения за сбивчивое объяснение задачи..</p>]]></content>
			<author>
				<name><![CDATA[jeti]]></name>
				<uri>https://linuxforum.ru/profile.php?id=4690</uri>
			</author>
			<updated>2012-06-07T11:31:47Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=280366#p280366</id>
		</entry>
</feed>
