Reputation: 51
Yes, I did already try to find information on this.
The Python socket documentation has this list of what I believe are protocols:
SO_*
socket.SOMAXCONN
MSG_*
SOL_*
IPPROTO_*
IPPORT_*
INADDR_*
IP_*
IPV6_*
EAI_*
AI_*
NI_*
TCP_*
What exactly do they do? Let's say I used
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
What does this do? I understand it's a raw socket, but does the IPPROTO_IP mean I have to construct everything? (i.e. the IP header down to the TCP to the data?)
The Python documentation says I can find information on the above in the Unix documentation on sockets, but I couldn't find the document. Anyone know where it is?
Upvotes: 4
Views: 4224
Reputation: 3773
There are a lot of Linux manual pages describing socket:
In general, we use these arguments for socket
:
Address family: AF_INET
for internet domain address family, AF_UNIX
for UNIX domain address family.
Socket type: SOCK_STREAM
for TCP, SOCK_DGRAM
for UDP. Of course you can use SOCK_RAW
for directly access IP protocol.
Protocol: when using TCP or UDP, leave it to 0 is just fine; when using RAW, you can specify protocol to 0, IPPROTO_TCP for TCP sockets, IPPROTO_UDP for UDP sockets.
And, SO_
means "socket option", SOL_
means "socket option level", which are used to set socket options through setsockopt
(also mentioned in SOCKET).
In fact, you can find more pages at the bottom of these pages in the SEE ALSO
section. Note that the page of 2 or 3 is a concrete system call or library function, pages of 7 is what you need.
Upvotes: 8