Python-сокет, создающий дубликаты сокетов - PullRequest
0 голосов
/ 26 сентября 2019

У нас есть два процесса, которые общаются друг с другом через сокет IPC, демон конфигурирования написан на python, а nsm написан на C. Для создания этого сокета используется файл, то есть /var/tmp/.nsm_cfgd_stats.Во время загрузки этот сокет создается, и nsm перечисляет этот сокет.Поэтому, когда новая команда выполняется из конфигурации, вместо того, чтобы использовать существующий сокет, я каждый раз получаю новый сокет.Фрагмент кода на стороне cfgd:

fd = cfgd.io.nbsocket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
fd.connect("/var/tmp/.nsm_cfgd_stats")
fd.send(struct.Struct("=L").pack(0xA5))

. nbsocket.socket вызовет конструктор класса сокета, который является просто оболочкой класса сокета python.

def __init__(self, family=stdsocket.AF_INET, type=stdsocket.SOCK_STREAM, proto=0, _sock=None):
    self._sock = _sock if _sock else stdsocket.socket(family,type,proto)
    self._timeout = None
    self._sock.setblocking(0)

Но еслиЯ запускаю команду netstat. Я получаю вывод как

/root # netstat -an | grep nsm_cfgd_stats
unix  2      [ ACC ]     STREAM     LISTENING       1591 /var/tmp/.nsm_cfgd_stats
unix  3      [ ]         STREAM     CONNECTING         0 /var/tmp/.nsm_cfgd_stats

Я не уверен, почему это поведение проявляется?Это что-то связанное с классом Python-сокета или какая-то другая проблема в ОС.

ОС не Linux, а основана на версии ядра Linux 3.14.

Заранее спасибо.

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