Страница 1 из 1

Низкоуровневое программирование сокетов

СообщениеДобавлено: 18 фев 2004 20:13
Aragaer
Проблема - есть команды (Перл, любимый), про которые говорится, что они аналогичны системным вызовам в Юниксе и более ничего. Часть я вроде разобрал... Но все-таки возник затуп.

Надо слушать два сокета и в случае, если что-то пришло в один из них, сразу (ключевое слово - сразу) обрабатывать. Опрашивать сокеты по очереди - не прокатит, т.к. опрос равносилен чтению из него. а если там пусто, то "читать, пока не появится", что (разумеется) никуда не годится.

Соответственно интересует следующая вещь - есть ли какие-либо системные вызовы, проверяющие состояние сокета? Чтобы проверил и если пусто, то едем дальше.
Вариант два - реализовать сие через два разных процесса. Но можно ли тогда двум разным процессам дать одни и те же сокеты (ибо обработка включает в себя пересылку во второй сокет)?
И не будет ли тогда проще вариант три - посадить на каждый из сокетов по процессу, а третьим обрабатывать идущие от них ... слова? Но это уже три процесса. Третий вариант я (теоретически) реализовать смогу, поскольку опрос потока получается (команда -s в Перле. Почему она не работает с сокетами - понятия не имею). Хотя опять-таки затык - надо опрашивать поток и сокет 8)

Вобщем... Задача из красивых, приятных и полезных. Надо будет выбить свой Кэмел из человека, его экспроприировавшего...

СообщениеДобавлено: 19 фев 2004 16:59
Aragaer
Вопрос снят. Используем IO::Select вместе с IO::Socket и вуаля...

СообщениеДобавлено: 25 фев 2004 03:18
SLAY`ee`K
Умница!

СообщениеДобавлено: 25 фев 2004 08:52
Aragaer
Сейчас нахожусь в очередном затыке по этому поводу - состояние сокета я проверить уже могу, а вот состояние консоли - никак. Тут уж точно придется опрос консоли в отдельный подпроцесс выносить... Да здравствует ipc!