Протокол не найден socket.getprotobyname

#python #sockets #rabbitmq #ubuntu-14.04 #protocols

#python #сокеты #rabbitmq #ubuntu-14.04 #протоколы

Вопрос:

Я пытаюсь подключиться к серверу RabbitMQ, но при подключении он продолжает выходить из строя с socket.error: protocol not found ошибкой.

 In [1]: import pika

In [2]: pika.BlockingConnection(pika.ConnectionParameters('ip_of_server'))
  

с выводом ошибки

 ---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-2-7adc44418966> in <module>()
----> 1 pika.BlockingConnection(pika.ConnectionParameters('localhost')
      2 )

/usr/lib/python2.7/dist-packages/pika/adapters/blocking_connection.pyc in __init__(self, parameters)
    105
    106         """
--> 107         super(BlockingConnection, self).__init__(parameters, None, False)
    108
    109     def add_on_close_callback(self, callback_method_unused):

/usr/lib/python2.7/dist-packages/pika/adapters/base_connection.pyc in __init__(self, parameters, on_open_callback, on_open_error_callback, on_close_callback, ioloop, stop_ioloop_on_close)
     60                                              on_open_callback,
     61                                              on_open_error_callback,
---> 62                                              on_close_callback)
     63
     64     def add_timeout(self, deadline, callback_method):

/usr/lib/python2.7/dist-packages/pika/connection.pyc in __init__(self, parameters, on_open_callback, on_open_error_callback, on_close_callback)
    588         # Initialize the connection state and connect
    589         self._init_connection_state()
--> 590         self.connect()
    591
    592     def add_backpressure_callback(self, callback_method):

/usr/lib/python2.7/dist-packages/pika/adapters/blocking_connection.pyc in connect(self)
    204         """
    205         self._set_connection_state(self.CONNECTION_INIT)
--> 206         if not self._adapter_connect():
    207             raise exceptions.AMQPConnectionError('Could not connect')
    208

/usr/lib/python2.7/dist-packages/pika/adapters/blocking_connection.pyc in _adapter_connect(self)
    272         # Remove the default behavior for connection errors
    273         self.callbacks.remove(0, self.ON_CONNECTION_ERROR)
--> 274         if not super(BlockingConnection, self)._adapter_connect():
    275             raise exceptions.AMQPConnectionError(1)
    276         self.socket.settimeout(self.SOCKET_CONNECT_TIMEOUT)

/usr/lib/python2.7/dist-packages/pika/adapters/base_connection.pyc in _adapter_connect(self)
    103         # Get the addresses for the socket, supporting IPv4 amp; IPv6
    104         sock_addrs = socket.getaddrinfo(self.params.host, self.params.port,
--> 105                             0, 0, socket.getprotobyname("tcp"))
    106
    107         # Iterate through each addr tuple trying to connect

error: protocol not found
  

Я прочитал это, поскольку произошел сбой в строке socket.getprotobyname в base_connection.pyc. Затем я попытался использовать socket.getprotobyname самостоятельно, и я продолжаю получать error: protocol not found . Очевидно, что это не может исправить мое TCP-соединение.

Из того, что я могу сказать, он должен выводить 6

 In [5]: import socket

In [6]: socket.getprotobyname('tcp')
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-6-3a85adf1710a> in <module>()
----> 1 socket.getprotobyname('tcp')

error: protocol not found
  

Я использую Ubuntu 14.04 и python 2.7.6 и понятия не имею, как устранить эту ошибку.

Я прочитал несколько тем о файле /etc / protocols, но, похоже, у меня его нет. Может ли это быть проблемой? Если да, то есть ли общий файл, который я могу загрузить, или способ его создания?

Комментарии:

1. Пожалуйста, опубликуйте код, который выдает эту ошибку.

Ответ №1:

Да, у вас должен быть /etc/protocols файл. Должно быть, он был каким-то образом удален. Он поступает из netbase пакета.

Это должно переустановить его:

 sudo apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall netbase
  

(Более подробная информация наhttps://askubuntu.com/questions/66533/how-can-i-restore-configuration-files )