Подтвердить UDP-пакеты без сигналов? - PullRequest
0 голосов
/ 20 октября 2011

Я внедряю базовую систему передачи файлов между клиентом и сервером для практики использования UDP. Я пытаюсь реализовать некоторую базовую надежность.

Прямо сейчас мой сервер отправляет порцию данных и ожидает сигнала подтверждения о том, что порция была получена. Есть ли способ отправить более надежное сообщение без использования сигналов?

В идеале я хотел бы просто иметь возможность использовать sendto и recvfrom, но если нет вероятности, что пакеты не будут получены, recvfrom просто зависнет.

Возможно ли это, или мне нужно использовать сигналы?

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

Вы можете использовать <a href="http://linux.die.net/man/2/select" rel="nofollow">select()</a>, чтобы узнать, когда есть вход для чтения из сокета, по которому вы получаете ACK от клиента.Затем вы можете указать тайм-аут, после которого select() будет возвращаться, даже если вход недоступен.Это дает вам возможность поддерживать работу сервера "."занятый цикл "и потребляют слишком много ресурсов процессора.

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

Установить время ожидания чтения сокета с помощью setsockopt () и SO_TIMEOUT.

...