GRP C C ++ Asyn c Сервер Как отличить WritesDone от разорванного соединения - PullRequest
0 голосов
/ 25 марта 2020

При разработке сервера Asyn c C ++ GRP C, как я могу отличить клиента, выполняющего запись, от разрываемого соединения?

Я передаю данные с клиента на сервер и когда клиент завершит работу, он вызовет WritesDone, чтобы сообщить серверу, что он должен завершить sh сохранение файла. Если у меня есть сервер syn c, я могу провести различие между клиентом, вызывающим WritesDone, и разрывом соединения, вызвав context-> IsCancelled (), но в режиме asyn c вы не можете вызывать IsCancelled, пока не получите тег, указанный в AsyncNotifyWhenDone. .

В обоих случаях (WritesDone и Call done) тег Read возвращается с ok, установленным в false. Тем не менее, тег AsyncNotifyWhenDone, который позволил бы мне дифференцировать, прибывает после тега чтения.

Я буду знать после того, как попробую вызвать fini sh (он также вернет false), но мне нужно знать, прежде чем я вызовите fini sh, так как моя окончательная обработка может завершиться неудачей, и я больше не могу вернуть ошибку, если я уже вызвал fini sh.

1 Ответ

0 голосов
/ 03 апреля 2020

Нет способа различить guish, пока не вернется тег AsyncNotifyWhenDone. Это может произойти после чтения, в этом случае вам может понадобиться его буферизовать. В syn c API вы можете в любое время проверить IsCancelled () (вы также можете сделать это в API обратного вызова, который скоро будет доступен для общего использования).

...