У нас есть два процесса, которые общаются друг с другом через сокет 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.
Заранее спасибо.