Dear experts,
I'm developing an C++ application with sockets in a debian with a version of
kernel 2.6.x.
The idea of my application is to send messages using UDP sockets and have
only one receiver socket which receive all the message that are for him, so
to do that I create the socket like follows:
sock=::socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP))
In that way, using the PF_PACKET family allows to the application to receive
packets dealing directly with the network card driver.
So with that and a filter I create a socket to receive all the packets that
are UDP and starts with... The filter is set like that:
struct sock_fprog Filter //udp and udp[8:1]==0x7e
....
setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER,&Filter, sizeof(Filter))
Therefore my problem is that when I send a UDP message bigger than 16450
Bytes, the IPv4 layer fragment it, it sends fragments uf 16450 Bytes (I'm
not totally sure about the size) and in my reception I get 2 messages but
one of the is discarted because of my filter. But, even if I change my
filter I will receive two fragments that I will have to ensamble and I don't
like the idea :s...
So the solution is to disable the fragmentation of the IPv4. I read that
till kernels 2.2.x or pherhaps till kernels 2.4.x there was and option or
the file "/proc/sys/net/ipv4/ip_always_defrag" that it controled the
fragmentation, but in newest kernels this file doesn't exist.
Therefore, my question is if anyone knows how to disable that fragmentation
or change the size of the fragment to the maximum of 65535. Or if there's
any way of create a socket that receive a IP ensambled messages and could be
set a filter.
I hope someone could help me.
Thanks in advance!
_________________________________________________________________
Grandes éxitos, superhéroes, imitaciones, cine y TV...
http://es.msn.kiwee.com/ Lo mejor para tu móvil.
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]