Ошибка при запуске нескольких TcpListener в разных потоках.
От: seawolf  
Дата: 03.02.09 08:28
Оценка:
В приложении запускаются несколько потоков, в каждом потоке запускается TcpListener, слушающий порт. Все работает как должно быть до тех пор, пока не запускается 163ий поток. При запуске TcpListener'а на нем появляется ошибка "Невозможно выполнить операцию на сокете, т.к. буфер слишком мал или очередь переполнена". Подскажите в чем может быть проблема?
.net socket tcplistener
Re: Ошибка при запуске нескольких TcpListener в разных поток
От: TarasCo  
Дата: 03.02.09 08:56
Оценка: +3
S>Все работает как должно быть до тех пор, пока не запускается 163ий поток.

Улыбнуло )
Да пребудет с тобою сила
Re: Ошибка при запуске нескольких TcpListener в разных поток
От: seawolf  
Дата: 04.02.09 11:00
Оценка:
Ошибка все еще актуальна.
Вот упрощенный пример кода, который вызывает эту ошибку:

const int startPort = 10000;
IPAddress address = Dns.GetHostAddresses(Dns.GetHostName())[0];
for (int i = 0; i < 500; ++i)
{
    TcpListener listener = new TcpListener(address, startPort + i);
    listener.Start();
}
Re: Ошибка при запуске нескольких TcpListener в разных поток
От: ДимДимыч Украина http://klug.org.ua
Дата: 04.02.09 14:03
Оценка: +1
Здравствуйте, seawolf, Вы писали:

S>В приложении запускаются несколько потоков, в каждом потоке запускается TcpListener, слушающий порт. Все работает как должно быть до тех пор, пока не запускается 163ий поток. При запуске TcpListener'а на нем появляется ошибка "Невозможно выполнить операцию на сокете, т.к. буфер слишком мал или очередь переполнена". Подскажите в чем может быть проблема?


Проблема может быть в том, что невозможно выполнить операцию на сокете, т.к. буфер слишком мал или очередь переполнена.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[2]: Ошибка при запуске нескольких TcpListener в разных по
От: TarasCo  
Дата: 04.02.09 16:10
Оценка:
Задумайтесь, а может нельзя в данной вам ОС одному процессу слушать 500 сокетов, может это объективное ограничение? Это не такая простая ( для системы ) задача. Вы напишите, зачем вам это нужно: 99%, что вы что то недопонимаете, возможно существует другое, гораздо более изящное решение?
Да пребудет с тобою сила
Re[2]: Ошибка при запуске нескольких TcpListener в разных по
От: Vamp Россия  
Дата: 04.02.09 19:53
Оценка:
ДД>Проблема может быть в том, что невозможно выполнить операцию на сокете, т.к. буфер слишком мал или очередь переполнена.
Капитан Очевидность спешит на помощь...
Да здравствует мыло душистое и веревка пушистая.
Re[3]: Ошибка при запуске нескольких TcpListener в разных по
От: seawolf  
Дата: 05.02.09 05:13
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>Задумайтесь, а может нельзя в данной вам ОС одному процессу слушать 500 сокетов, может это объективное ограничение? Это не такая простая ( для системы ) задача. Вы напишите, зачем вам это нужно: 99%, что вы что то недопонимаете, возможно существует другое, гораздо более изящное решение?


Дело в том, что в реальном приложении как раз каждый сокет слушается в отдельном потоке и там появляется эта ошибка.
Re[4]: Ошибка при запуске нескольких TcpListener в разных по
От: seawolf  
Дата: 05.02.09 05:17
Оценка:
Здравствуйте, seawolf, Вы писали:

S>Здравствуйте, TarasCo, Вы писали:


TC>>Задумайтесь, а может нельзя в данной вам ОС одному процессу слушать 500 сокетов, может это объективное ограничение? Это не такая простая ( для системы ) задача. Вы напишите, зачем вам это нужно: 99%, что вы что то недопонимаете, возможно существует другое, гораздо более изящное решение?


S>Дело в том, что в реальном приложении как раз каждый сокет слушается в отдельном потоке и там появляется эта ошибка. Число 500 тоже дано для примера, в реальном приложении это число настраивается. Делов в том что приложение эмулирует несколько сотен контроллеров, каждый из которых слушает определенный порт.
Re[5]: Ошибка при запуске нескольких TcpListener в разных по
От: seawolf  
Дата: 05.02.09 05:18
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>Задумайтесь, а может нельзя в данной вам ОС одному процессу слушать 500 сокетов, может это объективное ограничение? Это не такая простая ( для системы ) задача. Вы напишите, зачем вам это нужно: 99%, что вы что то недопонимаете, возможно существует другое, гораздо более изящное решение?


Дело в том, что в реальном приложении как раз каждый сокет слушается в отдельном потоке и там появляется эта ошибка. Число 500 тоже дано для примера, в реальном приложении это число настраивается. Делов в том что приложение эмулирует несколько сотен контроллеров, каждый из которых слушает определенный порт.
Re[6]: Ошибка при запуске нескольких TcpListener в разных по
От: Michael Chelnokov Украина  
Дата: 06.02.09 23:59
Оценка:
Здравствуйте, seawolf, Вы писали:

S>ЗДелов в том что приложение эмулирует несколько сотен контроллеров, каждый из которых слушает определенный порт.


Лично у меня как-то слабо ассоциируется производительность нескольких сотен контроллеров, каждый из которых умеет делать TCP, и производительность одного сервера. Вы уверены, что эти несколько сотен контроллеров могут быть корректно проэмулированы на одном сервере? А если некорректно (т.е. при эмуляции получатся совсем другие временнЫе характеристики, нежели у реальных устройств), то какой смысл в такой эмуляции? Не лучше ли эмулировать, скажем, не более чем по 100 контроллеров на сервер? Плюс где-то рядом с этой цифрой также находится и "разумное" количество работающих потоков (такое, когда их взаимная толкотня еще не очень влияет).
Re[3]: Ошибка при запуске нескольких TcpListener в разных по
От: Аноним  
Дата: 12.02.09 19:03
Оценка:
Здравствуйте, Vamp, Вы писали:

ДД>>Проблема может быть в том, что невозможно выполнить операцию на сокете, т.к. буфер слишком мал или очередь переполнена.

V>Капитан Очевидность спешит на помощь...

Так причина ошибки и так названа. "Я затыкаю дырки пальцами. Почему-то при затыкании одиннадцатой дырки я не могу найти свободный палец".

Автору: прочитать про I/O Completion ports и про выделение памяти под потоки. После прочтения составить конспект на тему сильных и слабых сторон модели "один коннект = один поток".
Re[4]: Ошибка при запуске нескольких TcpListener в разных по
От: TarasCo  
Дата: 13.02.09 05:58
Оценка: :)
А>Автору: прочитать про I/O Completion ports и про выделение памяти под потоки. После прочтения составить конспект на тему сильных и слабых сторон модели "один коннект = один поток".

При чем тут коннекты? Автор не так примитивен!! Он хочет слушать тыщу разных портов одновременно. И кол-во потоков тут не основная проблема.
Да пребудет с тобою сила
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.