Исключение при создании сокета - PullRequest
0 голосов
/ 29 января 2019

Я использую glibmm v2.42 в Linux.

Я хочу создать клиент / сервер, используя собственный сокет Linux.

При попытке создать сокет всегда выдается исключениес кодом 15 (не поддерживается).

В приведенном ниже коде я зацикливался на перечислении семейства сокетов, перечислении типов и перечислении протоколов, но это всегда дает сбой.

#include <iostream>
#include <glibmm.h>
#include <giomm.h>

int main(){
  Glib::init();
  Gio::init();

  std::vector<Gio::SocketFamily> fams = {Gio::SOCKET_FAMILY_UNIX , Gio::SOCKET_FAMILY_IPV4 , Gio::SOCKET_FAMILY_IPV6};
  std::vector<Gio::SocketType> types = {Gio::SOCKET_TYPE_STREAM, Gio::SOCKET_TYPE_DATAGRAM, Gio::SOCKET_TYPE_SEQPACKET };
  std::vector<Gio::SocketProtocol> protocols = {Gio::SOCKET_PROTOCOL_DEFAULT , Gio::SOCKET_PROTOCOL_TCP, Gio::SOCKET_PROTOCOL_UDP, Gio::SOCKET_PROTOCOL_SCTP };
   Glib::RefPtr<Gio::Cancellable> cancellable = Gio::Cancellable::create();

 for(int i = 0; i  < fams.size(); i++){
    for(int j = 0; j < types.size(); j++){
        for(int k= 0; k < protocols.size(); k++){

            Gio::SocketFamily fam = fams[i];
            Gio::SocketType type= types[j];
            Gio::SocketProtocol protocol = protocols[k];

            try {
               Glib::RefPtr<Gio::Socket> socket = Gio::Socket::create(fam , type, protocol , cancellable);
            } catch(const Gio::Error& e){
                std::cout << e.code() << std::endl;
            }
        }
     }
 }

 return 0;
}

Есть идеи?У кого-нибудь есть рабочий пример клиент / сервер с собственным сокетом linux, использующий glibmm?

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ: В коде я удалил XXX и написал циклы.Этот код возвращает 15 для всех параметров конфигурации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...