День добрый.
Написал бота на C++, работающего через webhook.
Написал две версии, работающие через:
- stunnel4
- встроенный openssl
Обе версии испытывают одну и ту же проблему: данные приходят только после разрыва соединения с противоположного конца (когда у сервера Telegram проходит таймаут ожидания ответа). Т.е. у меня вызываются функции recv()
или SSL_read()
соответственно, которые:
- на блокирующих сокетах возвращают все пришедшие данные, но уже после разрыва соединения, либо возвращают ничего по истечению таймаута, установленного через
setsockopt(newsock, SOL_SOCKET, SO_RCVTIMEO, ...)
- не неблокирующих сокетах возвращают ничего мгновенно и так 100500 раз в цикле, пока ТГ не разорвёт соединение - тогда за один вызов возвращаются все данные
Интересно то, что эта проблема только с серверами Telegram: по крайней мере, если я выполняю запрос curl -X POST -d 'тут json' -k https://MYBOTURL
со своего компа к боту (бот на VPS), то всё выполняется успешно.
Может кто знает, с чем это может быть связано…