Difference Between Socket Types
python, sockets
Solution
There are a lot of Linux manual pages describing socket:
- SOCKET
- IP
- TCP
- UDP
- UNIX
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.
Problem
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?