Получить и закрыть
Эта команда выделяет буфер получения, связанный с указанным соединением. Если этой команде не предшествует команда OPEN, или вызывающий процесс не уполномочен использовать это соединение, возвращается ошибка.
В простейшей реализации управление не будет возвращаться вызывающей программе, пока не заполнится буфер или не произойдет какая-нибудь ошибка, но эта схема существенно подвержена блокированию. Более развитая реализация будет позволять нескольким командам RECEIVE ожидать выполнения одновременно. Они будут выполняться по мере поступления сегментов. Эта стратегия позволяет увеличить пропускную способность за счет более развитой схемы (возможно, асинхронной) уведомления вызывающей программы, что был получен PUSH или заполнен буфер. Если прибывает количество данных, достаточное для заполнения буфера до появления PUSH, флаг PUSH в ответ на RECEIVE задаваться не будет. Буфер будет заполнен таким количеством данных, сколько он может вместить. Если до заполнения буфера появляется PUSH, буфер возвращается частично заполненным и с указанием PUSH.
При наличии срочных данных пользователь будет проинформирован об этом, как только они появятся, с помощью сигнала TCP пользователю. Получающий пользователь должен поэтому находиться в "срочном режиме". Если установлен флаг URGENT, остаются дополнительные срочные данные. Если флаг URGENT сброшен, то этот вызов RECEIVE вернул все срочные данные, и пользователь может теперь покинуть "срочный режим". Отметим, что данные, следующие за указателем срочности (несрочные данные), нельзя доставить пользователю в тот же буфер с предшествующими срочными данными, если только граница для пользователя четко не обозначена.
Чтобы различить несколько ожидающих RECEIVE и компенсировать буфер, который не полностью заполнен, код возврата сопровождается указателем буфера и счетчиком байтов, указывающим реальную длину полученных данных.
Альтернативные реализации RECEIVE могут иметь TCP, который выделяет буферную память, или TCP может совместно с пользователем использовать кольцевой буфер.
Close (Закрыть)
Эта команда вызывает закрытие указанного соединения. Если соединение не открыто, или же вызывающий процесс не уполномочен использовать это соединение, возвращается ошибка. Закрытие соединения предназначено для элегантной работы в том смысле, что ожидающие SEND будут переданы (и переданы повторно), когда позволит управление потоком, пока все не будет обслужено. Таким образом, допустимо выполнить несколько вызовов SEND, за которыми следует CLOSE, и ожидать, что все данные будут посланы в место назначения. Также должно быть ясно, что пользователи могли бы продолжать RECEIVE (получать) на закрытых соединениях, так как другая сторона могла бы пытаться передавать свои завершающие данные. Фактически CLOSE означает: "У меня для передачи больше ничего нет", а не "Я больше ничего не буду принимать". Может случиться (если протокол на уровне пользователя не очень хорошо проработан), что сторона не сможет избавиться от всех своих данных до того, как закончится выделенное время. В этом случае CLOSE превратится в ABORT, и закрывающий TCP прервется. Пользователь может закрыть соединение в любое время по своей собственной инициативе или в ответ на различные предложения от TCP (например, выполнено удаленное закрытие, превышена задержка передачи, место назначения недоступно).
Так как закрытие соединения требует коммуникации с внешним TCP, соединение может оставаться в закрытом состоянии в течение некоторого времени. Попытки повторно открыть соединение, прежде чем TCP ответит на команду CLOSE, будет приводить к сообщению об ошибке. CLOSE также подразумевает вызов функции push (выталкивания данных).
Status Abort (Прервать)
Эта команда вызывает прерывание всех ожидающих SEND и RECEIVE, удаление ТСВ и отправку специального сообщения RESET для TCP на другой стороне соединения. В зависимости от реализации пользователи могут получать указания о прерывании для каждой ожидающей команды SEND или RECEIVE или просто получить подтверждение команды ABORT.
