Mailslot

Мэйлслот — один из механизмов межпроцессного взаимодействия, обеспечивающий однонаправленную передачу информации и позволяющий производить широковещательную рассылку сообщений по сети.

Реализация

[править | править код]

Мэйлслот является клиент-серверным интерфейсом. Сервер мэйлслотов — процесс, который создаёт мэйлслот и может читать из него информацию. Мэйлслот существует до тех пор, пока не закрыты все его серверные дескрипторы. Если несколько серверных процессов внутри домена создадут мэйлслоты с одинаковым именем, то сообщения, адресованные этому мэйлслоту и посылаемые в домен, будут приниматься всеми создавшими его процессами. Клиентом мэйлслота может быть любой процесс, знающий его имя. Клиент записывает в мэйлслот сообщения для передачи их посредством датаграмм серверу. Один и тот же процесс может быть одновременно клиентом и сервером мэйлслотов.

Для создания мэйлслотов используется специальное пространство имён «\\.\mailslot\[путь]имя». Для записи информации в мэйлслот на локальном компьютере клиентом используется то же самое имя, что использовалось сервером для создания мэйлслота. Для записи информации в мэйлслот удалённого компьютера используется форма «\\имя компьютера\mailslot\[путь]имя». Для записи информации во все мэйлслоты домена указывается имя домена или звёздочка, обозначающая первичный домен системы: «\\имя домена\mailslot\[путь]имя» или «\\*\mailslot\[путь]имя».

Для создания мэйлслота сервером используется специальная функция Windows API CreateMailslot. Для создания дескриптора мэйлслота клиентом, записи информации клиентом, чтения её сервером и закрытия дескриптора используются функции для работы с файлами CreateFile, WriteFile, ReadFile, CloseHandle.

Некоторые программы, использующие мэйлслоты:

  • MAILSLOT\Messngr — Microsoft NET SEND Protocol
  • MAILSLOT\Browse — Microsoft Browser Protocol
  • MAILSLOT\Alerter
  • MAILSLOT\53cb31a0\UnimodemNotifyTSP
  • MAILSLOT\HydraLsServer — Microsoft Terminal Services Licensing
  • MAILSLOT\CheyenneDS — CA BrightStor Discovery Service