在python中通过单个套接字多次发送数据

时间:2015-05-10 11:32:06

标签: python sockets serversocket broken-pipe

我有一个python程序,我使用服务器套接字发送数据。有一个类有一些Threading方法。每个方法都检查一个队列,如果队列不为空,它会通过服务器套接字发送数据。队列正在填充客户端发送给服务器的内容(服务器正在侦听输入请求)。通过方法调用完成发送:

def send(self, data):
    self.sqn += 1
    try:
        self.clisock.send(data)
    except Exception, e:
        print 'Send packet failed with error: ' + e.message

当程序启动时,发送速率大约为500,但过了一段时间它会立即减少到30,但有以下异常:

Send packet failed with error: <class 'socket.error'>>>[Errno 32] Broken pipe 

我不知道是什么原因引起了这个增长率!有什么想法吗?

1 个答案:

答案 0 :(得分:1)

该错误来自您的发送功能,试图写入另一侧关闭的套接字。如果是这样,那么使用

捕获异常
import errno, socket
try:
    self.clisock.send(data)
except socket.error, err:
    if err[0] == errno.EPIPE:
        # do something
    else:
        pass # do something else

如果这不是客户端的预期行为,那么您将不得不使用相应的客户端代码更新您的帖子。