LINUX.ORG.RU

[C, Linux, sockets] AF_UNIX + SOCK_SEQPACKET


0

1

Вызов

socket(PF_INET, SOCK_SEQPACKET, 0);
возвращает -1 с ошибкой «Socket type not supported». Почитав, выяснил, что «служба передачи последовательности пакетов в домене Интернет реализуется на базе протокола SCTP». Поставил соотв. пакет (для Fedora это был lksctp-tools), но ошибка сохранилась. ЧЯДНТ? И да, с SOCK_STREAM все работает нормально.


Ответ на: комментарий от tailgunner

Это оно?

# modinfo sctp
filename:       /lib/modules/2.6.35.10-74.fc14.i686/kernel/net/sctp/sctp.ko
license:        GPL
description:    Support for the SCTP protocol (RFC2960)
author:         Linux Kernel SCTP developers <lksctp-developers@lists.sourceforge.net>
alias:          net-pf-10-proto-132
alias:          net-pf-2-proto-132
srcversion:     5A392BCBA4288C7A4C1845E
depends:        ipv6,libcrc32c
vermagic:       2.6.35.10-74.fc14.i686 SMP mod_unload 686 
parm:           no_checksums:Disable checksums computing and verification (bool)

harvos
() автор топика
Ответ на: комментарий от tailgunner
# modprobe -l | grep sctp
kernel/net/netfilter/nf_conntrack_proto_sctp.ko
kernel/net/netfilter/xt_sctp.ko
kernel/net/ipv4/netfilter/nf_nat_proto_sctp.ko
kernel/net/sctp/sctp.ko
kernel/net/sctp/sctp_probe.ko
harvos
() автор топика
Ответ на: комментарий от tailgunner

В общем, нечто странное. Запустил еще раз - коннект проскочил, теперь ошибка в bind - Permission denied:

 50         addr.sin_family         = AF_INET;
 51         addr.sin_port           = htons(SERVER_PORT);
 52         addr.sin_addr.s_addr    = INADDR_ANY;
 53 
 54         if( ( client_listener_sd = socket(PF_INET, SOCK_SEQPACKET, 0) ) < 0 )
 55         {
 56                 error( "ERROR in client_listener_sd setup" );
 57         }
 58         setsockopt( client_listener_sd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(&optval) );
 59         printf("Main client_listener_sd(fd=%d) created! \n",client_listener_sd);
 60 
 61         if( bind(client_listener_sd, (struct sockaddr *)&addr, sizeof(addr) ) < 0 )
 62         {
 63                 perror( "ERROR binding client_listener_sd to address" );
 64                 return -1;
 65         }

harvos
() автор топика

Погуглил. В гугле говорят, мол, без SElinux'а все работает. Отключил SELinux:

# echo 0 > /selinux/enforce
Но теперь accept возвращает -1 (Operation not supported) =)

harvos
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.