Is it possible to have several sockets linked to one interface (i.e. ethernet port) with different protocols, UDP, TCP, RAW etc, so if a packet is sent via ethernet it is picked up by the correct socket only.
I think you are talking of the relation between port number used when talking of sockets and ethernet port.
A Socket (TCP/UDP) Works in the Transport Layer.
A port number comes here in the Layer and this is not the Ethernet port.
You can have a TCP Socket bound to say port 88 as well as a UDP Socket bound to port
88.
You may also have raw sockets, which can directly use the IP Headers.
This may require root/administrative priviledge.
Here seems you need to decode the IP packets and get to the specific protocol
on top it.
(There is a field in the IP header called Protocol which mentions which
upper layer protocol the packet belongs to)
So there can be several sockets, which finally get the data from your ethernet port.
Please refer the following Links for some basic concepts,
http://en.wikipedia.org/wiki/Network_socket
http://en.wikipedia.org/wiki/Raw_socket
http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frzab6%2Fhowdosockets.htm