Я вызываю connect () на клиенте. Клиент входит в состояние SYN_SENT и отправляет SYN. Теперь он получает SYN без ACK, поэтому клиент переходит в состояние SYN_RCVD.
Функция connect () возвращается в этот момент? Технически у вас достаточно информации для вызова send () и recv () в сокете. Сам RFC говорит, что если вы вызываете SEND для сокета в состоянии SYN_RCVD, то:
SYN-RECEIVED STATE
Queue the data for transmission after entering ESTABLISHED state.
И, если вы звоните RECEIVE:
LISTEN STATE
SYN-SENT STATE
SYN-RECEIVED STATE
Queue for processing after entering ESTABLISHED state. If there
is no room to queue this request, respond with "error:
insufficient resources".
Итак, мой вопрос: возвращается ли connect () после получения SYN, а затем блокируется ли вызов recv (), или сам блокирует connect (), пока соединение не будет установлено полностью?