socket
|
DGRAM or STREAM
+-------------+-------------+
| |
no bind or bind SERVER or CLIENT
+--------+--------+ +-------+------+
| | | |
optional connect | bind² bind²
+----+----+ | | |
| | | listen connect
| connect | | |
| | | accept--+ read/write
sendto send/sendto | | | ((recv/send))
| +-----+
| |
+-------------+ read/write
| ((recv/send))
optional connect
+--------+--------+
| |
bind bind
| |
| connect
| |
sendto send/sendto
| |
recv/recvfrom recv/recvfrom¹
¹ Volání ‹recv*› se zde chováním liší od větve, která nevolá
‹connect›. V této větvi ‹recv› a ‹recvfrom› odmítnou pakety z jiných
adres, než jaká byla předána ‹connect›.
² Ačkoliv je to typické, ruční volání ‹bind› nemusí «vždy» nutně
předcházet voláním ‹listen› nebo ‹connect› a někdy může být
vynecháno, přičemž bude následně zavoláno automaticky uvnitř daného
volání. Nicméně obvyklý způsob užití je zavolat ‹bind› explicitně
s patřičnými parametry.