Уведомления

Группа в Telegram: @pythonsu

#1 Май 8, 2009 12:11:38

hop
От:
Зарегистрирован: 2009-03-06
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

socket потеря данных

Привет всем!!!
Потихоньку усваиваю ООП, потоки и сокеты. Пишу сервер которые принимает сообщения и передают их в jabber (позже буду юзать xmppy).
Возникла проблемка, передаю на порт вывод ps aux и каждый раз приходит не весь вывод.

[root@hop]# ps aux | nc keeper.real 12345
ps aux | nc keeper.real 12345
и вот только этот кусок приходит

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root 1 0.0 0.0 2136 644 ? Ss 10:31 0:00 init [5]
root 2 0.0 0.0 0 0 ? S< 10:31 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S< 10:31 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S< 10:31 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 10:31 0:00 [watchdog/0]
root 6 0.0 0.0 0 0 ? S< 10:31 0:00 [migration/1]
root 7 0.0 0.0 0 0 ? S< 10:31 0:00 [ksoftirqd/1]
root 8 0.0 0.0 0 0 ? S< 10:31 0:00 [watchdog/1]
root 9 0.0 0.0 0 0 ? S< 10:31 0:00 [events/0]
root 10 0.0 0.0 0 0 ? S< 10:31 0:00 [events/1]
root 11 0.0 0.0 0 0 ? S< 10:31 0:00 [khelper]
root 52 0.0 0.0 0 0 ? S< 10:31 0:00 [kblockd
вот код:

import os
import sys
import signal
from socket import *
import threading
import subprocess

class JabberClient(threading.Thread):
def __init__(self, channel, details):
self.channel = channel
self.details = details
signal.signal(signal.SIGTERM, self.mystop)
signal.signal(signal.SIGINT, self.mystop)
threading.Thread.__init__(self)
#======================================================
def run(self):
self.msg = self.channel.recv(160000)
self.receive = "hop@jabber.real"
cmd = "su - nagios -c \"/bin/echo -e '" + self.msg + "' | " + program + " -s msg -p " + proto + " -t " + self.receive + "\""
proc = subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE)
self.channel.close()
#======================================================
#(ctrl + c, kill)
def mystop(self):
self.channel.close()
#======================================================
if __name__ == "__main__":
host='keeper.real'
port=12345
client_limit = 5
limit_error = 3
program = "/usr/local/bin/centerim"
proto = "jab"
server_pass = "12345"
log_file = "/var/log/jabber_sender.log"
server = socket(AF_INET, SOCK_STREAM)
server.bind((host, port))
server.listen(client_limit)
while 1:
channel, details = server.accept()
JabberClient(channel, details).start()
Если не использовать потоки то все работает. Подозреваю что ошибка где то тут
self.msg = self.channel.recv(160000)
но до конца все равно не понимаю что к чему. Как пофиксить?



Офлайн

#2 Май 9, 2009 01:48:10

hop
От:
Зарегистрирован: 2009-03-06
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

socket потеря данных

вопрос снят. решение нашлось в соседнем топике http://python.su/forum/viewtopic.php?id=4346



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version