Пример #1
0
	def writeSomeDatas(self, data):
		try:
			return writev(self, data)
		except (OSError, IOError), io:
			if io.errno in (errno.EAGAIN, errno.EINTR):
				return 0
			return CONNECTION_LOST
Пример #2
0
	def send_notice(self, code, msg):
		if msg is None:
			msg = ''
		elif not isinstance(msg, str):
			msg = msg.pack()
		f = fuse_out_header(unique = 0,
							error  = code,
							len    = self.__out_header_size + len(msg))
		
		if msg:
			data = (f.pack(), msg)
		else:
			data = (f.pack(),)
		try:
			#self.transport.write(data)
			l = writev(self.transport.fileno(),data)
			if l != len(data):
				raise RuntimeError("could not write notification to FUSE socket")
		except Exception as e:
			print_exc(file=sys.stderr)
			self.connectionLost(e)
Пример #3
0
	def send_reply(self, req, reply=None, err=0):
		assert 0 <= err < 1000
		if reply is None:
			reply = ''
		elif isinstance(reply, unicode):
			reply = reply.encode("utf-8")
		elif not isinstance(reply, str):
			reply = reply.pack()
		f = fuse_out_header(unique = req.unique,
							error  = -err,
							len    = self.__out_header_size + len(reply))

		name = fuse_opcode2name[req.opcode][0]
		if err:
			self.log('%s(%d) >> %s', name, req.unique, errorcode[err])
		elif reply and len(reply) < 100:
			self.log('%s(%d) >> %s', name, req.unique, repr(reply))
		elif reply:
			self.log('%s(%d) >> (%d)', name, req.unique, len(reply))
		else:
			self.log('%s(%d) >> -', name, req.unique)

		if reply:
			data = (f.pack(), reply)
		else:
			data = (f.pack(),)
		try:
			#self.transport.write(data)
			l = writev(self.transport.fileno(),data)
			ls = 0
			for d in data: ls += len(d)
			if l != ls:
				raise RuntimeError("could not write to FUSE socket: %d != %d" % (l,ls))
		except Exception as e:
			print_exc(file=sys.stderr)
			self.connectionLost(e)