Det elementära dataöverföringssocketsystemet kräver att skicka och ta emot data över sockeln är send() och recv(). Varje samtal tar fyra parametrar:
- socket descriptor: Uttagsbeskrivningen för uttaget för att skicka eller ta emot data.
- buffert: En pekare till minnesbufferten som innehåller data som ska skickas eller används för att lagra mottagna data.
- längd: Längden på data som ska skickas eller tas emot.
- flaggor: En uppsättning flaggor som kan användas för att modifiera samtalets beteende.
`send()`-anropet överför data från programmets buffert till bufferten för peeren genom sockeln.
`recv()`-anropet tar emot data från bufferten för peeren till bufferten för programmet genom sockeln.
Följande flaggor kan användas med `send()`:
- MSG_CONFIRM :Gör att data skickas över nätverket omedelbart.
- MSG_DONTROUTE: Förhindrar att data dirigeras genom standardgatewayen. Den här funktionen kan vara användbar för att skicka data till en specifik värd.
- MSG_EOR: Indikerar att meddelandet är slutet på en post.
- MSG_MORE :Indikerar att mer data skickas.
- MSG_NOSIGNAL :Förhindrar generering av en SIGPIPE-signal när data skickas till ett slutet uttag.
- MSG_OOB :Skickar data utanför bandet. Den här funktionen kan vara användbar för att skicka brådskande data.
Följande flaggor kan användas med `recv()`:
- MSG_WAITALL: Gör att samtalet blockeras tills hela datalängden har tagits emot.
- MSG_PEEK: Tillåter appen att titta på data utan att ta bort den från bufferten.
- MSG_OOB :Tar emot out-of-band-data.
Anropen `send()` och `recv()` kan användas för att skicka och ta emot data av vilken typ som helst. De används dock vanligtvis för att skicka och ta emot teckendata.