MailSlot
From Wikipedia, the free encyclopedia
A MailSlot is a type of interprocess communication that allows communication between processes both locally and over a network. The use of MailSlots is generally simpler than named pipes or sockets, but they are more limited.
Contents |
[edit] Features
MailSlots function as a server-client interface. A server can create a MailSlot, and a client can write to it. Only the server can read the mailslot. A server-client interface could consist of two processes communicating locally or across a network. MailSlots do not operate over Wide Area Networks such as the internet, though. Also, MailSlots offer no confirmation that a message has been received unless it is programmed into an application. MailSlots are generally a good choice when one process must broadcast a message to multiple processes, or if a fast and very easy solution is needed.
[edit] Implementations
The most widely known implementation of the MailSlot is the Messenger Service that exists in Windows XP. The Messenger Service is essentially a MailSlot server that waits for a message to arrive. When a message arrives it is displayed in a popup onscreen. The NET SEND
command is therefore a type of MailSlot client, because it writes to specified mailslots on a network.
A number of programs also use MailSlots to communicate. Generally these are amateur chat clients and other such programs. Commercial programs usually prefer pipes or sockets.
KNOWN MAILSLOTS
- 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
[edit] Example Code
Creating a Mailslot on a server, to be read (only).
/* Create a mail slot named blort, allowing any size records * to be received (up to 64K). Specify that we'll wait forever * when reading a record. */ HANDLE handle; handle = CreateMailslot("\\\\.\\mailslot\\blort", 0, MAILSLOT_WAIT_FOREVER, NULL); if (handle == INVALID_HANDLE_VALUE) { printf("CreateMailslot failed: %d\n", GetLastError()); }
Opening a Mailslot on a client, to send data to it.
/* Open the blort mailslot on MyComputer */ HANDLE handle; handle = CreateFile("\\\\MyComputer\\mailslot\\blort", GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (handle == INVALID_HANDLE_VALUE) { printf("CreateFile failed: %d\n", GetLastError()); }