
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
08.06.2020, 17:33
|
|||
|---|---|---|---|
Linux SetSockOpt error 22 |
|||
|
#18+
Решил использовать не Indy для приема/передачи пакетов в Linux. Создал сокет, принимаю пакеты через recv. Но если мне нужно завершить прием, то у меня не получиться выйти, т.к. recv ждет. Из этой ситуации можно выйти используя SetSockOpt(FSocket, SOL_SOCKET, SO_RCVTIMEO, @FPSocketTimeOut, Len); В Windows нормально отрабатывает, а вот в Linux возвращает ошибку 22 . Как я понял, то ошибка означает, что аргументы не те передаю. Стал копаться в документации. 3-им параметром передается вместо указателя на Integer структура TimeVal. Вот что у меня получилось, но все равно не работает. Где ошибка? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 17:41
|
|||
|---|---|---|---|
|
|||
Linux SetSockOpt error 22 |
|||
|
#18+
cptngrbГде ошибка? В декларации TTimeVal. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 17:43
|
|||
|---|---|---|---|
|
|||
Linux SetSockOpt error 22 |
|||
|
#18+
А точно правильно структуру описал? Код: plaintext 1. 2. 3. 4. long => Integer; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 17:44
|
|||
|---|---|---|---|
|
|||
Linux SetSockOpt error 22 |
|||
|
#18+
cptngrbНо если мне нужно завершить прием, то у меня не получиться выйти, т.к. recv ждет. И, как уже тебе сказали, проще всего это сделать, посылая себе спецпакет. У тебя же всё равно UDP... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 17:48
|
|||
|---|---|---|---|
Linux SetSockOpt error 22 |
|||
|
#18+
Dimitry Sibiryakov, когда уже сказали? почему проще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 17:50
|
|||
|---|---|---|---|
Linux SetSockOpt error 22 |
|||
|
#18+
iStrannik, Код: pascal 1. 2. 3. 4. 5. ошибка та же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 18:00
|
|||
|---|---|---|---|
|
|||
Linux SetSockOpt error 22 |
|||
|
#18+
misha mike не твой псевдоним?.. cptngrbошибка та же Ну так выясни уже размеры long на своём линухе. А ещё лучше - используй штатное объявление timeval и не занимайся самодеятельностью. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 18:21
|
|||
|---|---|---|---|
Linux SetSockOpt error 22 |
|||
|
#18+
Dimitry Sibiryakov, ник не мой; в Posix.SysTime объявлен тип timeval. Это решило проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 18:25
|
|||
|---|---|---|---|
Linux SetSockOpt error 22 |
|||
|
#18+
А почему посылка пакета предпочтительнее выставления таймаута? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 18:26
|
|||
|---|---|---|---|
Linux SetSockOpt error 22 |
|||
|
#18+
cptngrb А почему посылка пакета предпочтительнее выставления таймаута? потому что в случае отправки пакета всё в твоих руках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 18:40
|
|||
|---|---|---|---|
Linux SetSockOpt error 22 |
|||
|
#18+
defecator, у меня UDP, а значит одного пакета может не хватить (вдруг по дороге потеряется). Значит нужно в цикле отправлять, пока не поймает. Чувствую грабли будут разбросаны. Правда тайм-аут тоже не панацея. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 18:46
|
|||
|---|---|---|---|
|
|||
Linux SetSockOpt error 22 |
|||
|
#18+
cptngrbу меня UDP, а значит одного пакета может не хватить (вдруг по дороге потеряется). По какой дороге? Ты отправляешь сам его себе. Потеряться этот пакет может по одной-единственной причине: входной буфер переполнен. Но в этом случае у тебя и recv() не висит на ожидании. Алгоритм такой: ты выставляешь переменную флаг "сливай воду, руби концы" и посылаешь пакет размером в один байт. Твой цикл чтения после возврата из recv() проверяет эту переменную и завершает цикл, вызывая shitdown() и closesocket(). Случилось это по твоему пакету или любому другому - уже совершенно без разницы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 19:43
|
|||
|---|---|---|---|
Linux SetSockOpt error 22 |
|||
|
#18+
А не знаете, почему такая разница между tcpdump и project1 tcpdump (sudo tcpdump -i enp0s9 -nn udp port 5514 ) Код: plaintext 1. 2. project1 Код: plaintext отправил 4423203 пакета. правильно я понимаю, что 4216036 packets received by filter это то, сколько я должен принять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 20:03
|
|||
|---|---|---|---|
|
|||
Linux SetSockOpt error 22 |
|||
|
#18+
cptngrbправильно я понимаю, что 4216036 *packets received by filter* это то, сколько я должен принять? Не совсем. Из них надо вычесть дропнутые ядром. Или не надо?.. В любом случае смотреть эти цифры бесполезно в силу самой природы UDP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.06.2020, 20:16
|
|||
|---|---|---|---|
Linux SetSockOpt error 22 |
|||
|
#18+
Dimitry Sibiryakov Не совсем. Из них надо вычесть дропнутые ядром. Если вычесть дропнутые ядром, то это будет packets captured ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=58&mobile=1&tid=2038240]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 424ms |

| 0 / 0 |
