Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > socketpair(2)


Автор: GrayCardinal 7.5.2008, 14:14
САБЖ - для чего нужен сабж ?

Автор: JackYF 7.5.2008, 19:11
Предположу, что для общения между тредами одного и того же приложения, учитывая то, что man 2 socketpair тип сокетов может быть только AF_UNIX.

Автор: GrayCardinal 7.5.2008, 20:04
JackYF
ОДнако странно. Чтобы тредам что-то передать имеется тыща и один более рациональный способ. На кой надо сокеты ?

Автор: MAKCim 7.5.2008, 20:06
JackYF
GrayCardinal
для того же, для чего и pipe()
JackYF
потоков в Linux нет  smile 

Автор: JackYF 7.5.2008, 22:22
Цитата(MAKCim @  7.5.2008,  19:06 Найти цитируемый пост)
потоков в Linux нет 

Не придирайся  smile Потоки - они потоки и есть, и пофиг, как они реализованы.

З.Ы. Я угадал насчёт применения? smile

Автор: MAKCim 7.5.2008, 22:40
Цитата(JackYF @  7.5.2008,  22:22 Найти цитируемый пост)
Потоки - они потоки и есть, и пофиг, как они реализованы.

то, как они реализованы будет все равно только в том случае, если они вообще есть
но в Linux их нет, и это не придирка  smile 
 smile 
в тех системах, где реализована концепция потоков, есть четкое разделение процессов (инкапсулируют ресурсы) и потоков (структуры данных планирования выполнения кода)
в Linux такого разделения нет
есть структурирование процессов на уровне самих процессов
говорить о наличии многопоточности в Linux правильно только в контексте и терминах конкретной библиотеки, ее реализующей (NPTL, например)

Автор: MAKCim 7.5.2008, 23:11
Цитата(JackYF @  7.5.2008,  22:22 Найти цитируемый пост)
З.Ы. Я угадал насчёт применения?

да
в отличие от пайпов, домен AF_LOCAL определяет набор типов сокетов (как, впрочем, и любой другой домен) с разной семантикой использования стандартных операций над ними, что делает этот механизм более гибким нежели использование пайпов

Автор: Олег2005 8.5.2008, 10:38
Специального предназначения нет smile 
Просто одновременно (а создание сокетов требует ресурсов) создаются два совершенно равнозначных дуплексных канала связи - а уж как из применять? это зависит от программиста. Обычно для управления потоками ввода/вывода другого приложения

Автор: JackYF 8.5.2008, 12:20
Цитата(MAKCim @  7.5.2008,  21:40 Найти цитируемый пост)
говорить о наличии многопоточности в Linux правильно только в контексте и терминах конкретной библиотеки, ее реализующей (NPTL, например)

Ох, Макс... хорошо. Когда я буду говорить про потоки в GNU/Linux, я буду это говорить в контексте libpthread/NTPL, договорились? Оговариваться насчёт этого каждый раз - имхо, муторно и не особо по делу. Спасибо, конечно, за консультацию smile

Автор: MAKCim 8.5.2008, 12:39
Цитата(JackYF @  8.5.2008,  12:20 Найти цитируемый пост)
Ох, Макс... хорошо. Когда я буду говорить про потоки в GNU/Linux, я буду это говорить в контексте libpthread/NTPL, договорились?

Женя, я не придираюсь, я просто люблю точность, уж извини  smile 

Автор: GrayCardinal 8.5.2008, 12:45
MAKCim
Я бы попросил прекратить эти публичные душевные страдания по поводу "отсутствия потоков" и флеймить немного ближе к теме. 

Олег2005
Спасибо, этот аспект (насчет ресурсов) я не учёл.

Автор: MAKCim 8.5.2008, 17:22
Цитата(GrayCardinal @  8.5.2008,  12:45 Найти цитируемый пост)
Я бы попросил прекратить эти публичные душевные страдания по поводу "отсутствия потоков" и флеймить немного ближе к теме. 

 smile 
не боись

Добавлено @ 17:33
Олег2005,
http://www.linux-m32r.org/lxr/http/source/net/socket.c#L1205
где ты здесь увидел одновременное создание пары сокетов?  smile 
(я опять придираюсь?)
 

Автор: Олег2005 8.5.2008, 17:44
MAKCim
Что такое ТУТ???
Сходил по ссылке - ну и что дальше?
Цитата

1202  *      Create a pair of connected sockets.
1203  */
1205 asmlinkage long sys_socketpair(int family, int type, int protocol,
1206                                int __user *usockvec)
1207 {
1208         struct socket *sock1, *sock2;
1209         int fd1, fd2, err;
1210 
1211         /*
1212          * Obtain the first socket and check if the underlying protocol
1213          * supports the socketpair call.
1214          */
1215 
1216         err = sock_create(family, type, protocol, &sock1);
1217         if (err < 0)
1218                 goto out;
1219 
1220         err = sock_create(family, type, protocol, &sock2);
1221         if (err < 0)
1222                 goto out_release_1;
1223 
1224         err = sock1->ops->socketpair(sock1, sock2);

Где в моем посте про - ТУТ??????????
Что то у вас не вяжется - я не понимаю в чем ко мне претензии??? smile 

Автор: GrayCardinal 8.5.2008, 18:00
MAKCim
ИМХО, тебе надо выспаться smile

Автор: MAKCim 8.5.2008, 18:37
Цитата(Олег2005 @  8.5.2008,  17:44 Найти цитируемый пост)
Что то у вас не вяжется - я не понимаю в чем ко мне претензии???


Цитата(Олег2005 @  8.5.2008,  10:38 Найти цитируемый пост)
Просто одновременно (а создание сокетов требует ресурсов) создаются два совершенно равнозначных дуплексных канала связи

см. выделенное
код sys_socketpair() показывает, что ничего одновременно не создается
идет обычное последовательное создание двух сокетов в рамках одного системного вызова
разница между обычным созданием сокетов и cозданием посредством sys_socketpair() заключается в отсутствии необходимости указания адреса (struct sockaddr_un) при вызове sys_socketpair()

Цитата(GrayCardinal @  8.5.2008,  18:00 Найти цитируемый пост)
ИМХО, тебе надо выспаться

ты чертовски прав
уже вторые сутки почти живу на работе  smile 

однако посты у меня адекватные  smile так что не надо тут

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)