Beispiel #1
0
int cluster_finder_factory_container::send(session &s, session *sender,
		U32 msgid, const char *p, int l)
{
	if (s.writable() >= l) {
		node::querydata *q;
		if (msgid != 0 && sender) {
			//char *ptr = (char *)m_pkt_bkup.write((U8 *)p, l, ret);
			if ((q = (node::querydata *)s.f()->querymap().create(msgid))) {
				//((nodequery *)q->data)->p = ptr;
				//((nodequery *)q->data)->l = ret;
				q->s = sender;
				q->msgid = msgid;
				q->sk = sender->sk();
			}
			else { return NBR_EEXPIRE; }
		}
		if (s.send(p, l) < 0) {
			if (q) { s.f()->querymap().erase(msgid); }
			return NBR_ESEND;
		}
		return l;
	}
	return NBR_ESHORT;
}