Unix розетки.По сути,
- Звоните
socket(PF_UNIX, SOCK_STREAM, 0)
.Возвращает дескриптор файла или -1 при ошибке. - Используйте что-то вроде
struct sockaddr_un addr; bzero(addr); addr.sun_len = sizeof(addr); addr.sun_family = PF_UNIX; strncpy(addr.sun_path, "/path/to/file", sizeof(addr.sun_path)-1);
для создания адреса сокета. - Call
bind(fd, &addr, sizeof(addr))
. - call
listen(fd,backlog)
слушать связи.backlog
- это количество возможных соединений un-accept (). - Используйте accept () для принятия соединений от клиентов.Это возвращает новый FD или -1 при ошибке.
- Пусть клиенты создадут аналогичный сокет и подключатся () к адресу (я не думаю, что они должны связываться).
- Удалитеfile / path / to / file, когда закончите (или просто оставьте его там, если вы собираетесь использовать его позже).
Я не уверен, поддерживается ли SOCK_DGRAM для сокетов Unix (если такэто, вероятно, UDP-как).
См. Справочные страницы для socket (2), bind (2), listen (2), accept (2), connect (2), unix (4), setsockopt (2).
Для "перекрывающихся входов / выходов" см. Select (2).Вы можете дополнительно включить неблокирующий ввод / вывод с помощью fcntl(fd,F_SETFL,(int)(fcntl(fd,F_GETFL)|O_NONBLOCK))
(см. Fcntl (2)), это означает, что read () и write () никогда не блокируют (что означает, что write () может возвращать short, поэтому вам нужно посмотреть на возвращаемое значение).
Я не совсем уверен, как именованные каналы Windows представляют несколько соединений от нескольких клиентов, но в UNIX вы получаете один файловый дескриптор на соединение (плюс один для сокета «прослушивания»).