В сокетах TCP / IP как сервер узнает, что клиент занят и не получает данные? - PullRequest
0 голосов
/ 26 октября 2011

Как в сокетах TCP / IP сервер узнает, что клиент занят и не получает данные?

Мое решение:

Используйте connect (),

Я не уверен.

спасибо

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

В сокетах TCP / IP, как сервер узнает, что клиент занят и не получает данные

Если TCP постоянно отправляет данные, которые одноранговый узел не подтверждает, в конечном итоге окно отправки заполнится. В этот момент TCP собирается буферизовать данные для «отправки позже». В конечном итоге размер буфера будет достигнут, и send(2) будет зависать (что обычно не происходит).

Если send(2) начинает зависать, это означает, что равноправный TCP не подтверждает данные .

Очевидно, что даже если одноранговый TCP принимает данные, это не означает, что одноранговое приложение фактически использует их. Вы можете реализовать свой собственный механизм ACK поверх TCP, и это не так необоснованно, как кажется. Это может привести к тому, что клиент будет время от времени отправлять сообщение «Отправить мне больше».

1 голос
/ 26 октября 2011

Клиент почти всегда получает ваши данные, и я имею в виду, что ОС будет принимать пакеты и ставить их в очередь для чтения. Если эта очередь заполняется, отправитель блокируется (в любом случае TCP). Вы не можете на самом деле знать активность клиентского кода. В основном ваш единственный вариант - использовать тайм-ауты.

...