Example #1
0
//send data ,and save the left data
static int __tcpnode_send_with_save(struct nd_tcp_node *node, void *msg_buf, size_t datalen)
{
	ENTER_FUNC() ;
	int ret = node->sock_write((nd_handle)node,msg_buf,datalen) ;
	if(-1==ret ) {
		if(node->sys_error!=ESOCKETTIMEOUT){
			LEAVE_FUNC();
			return -1 ;
		}
		else {
			ret = ndlbuf_write(&(node->send_buffer),(void*)msg_buf,datalen,EBUF_SPECIFIED) ;
			if(ret == datalen) {
				node->myerrno = NDERR_SUCCESS ;
			}
		}
	}
	else if(ret==datalen) {
		LEAVE_FUNC();
		return (int)datalen ;
	}
	else {
		int wlen ;
		char *padd = (char*) msg_buf ;
		padd += ret ;
		wlen = ndlbuf_write(&(node->send_buffer),padd,datalen-ret,EBUF_SPECIFIED) ;
		if (wlen > 0) {
			ret = wlen + ret;
		}
	}
	LEAVE_FUNC();
	return ret ;
}
Example #2
0
static int __tcpnode_push_and_send(struct nd_tcp_node *node, void *msg_buf, size_t datalen, int is_write_all)
{
	ENTER_FUNC();
	signed int ret =0;
	
	nd_netbuf_t *pbuf = &(node->send_buffer);
	size_t length_in_buff = ndlbuf_datalen(pbuf);

	if (length_in_buff) {
		int flushlen = node->sock_write((nd_handle)node, ndlbuf_data(pbuf), length_in_buff);
		if (flushlen > 0) {
			nd_assert(flushlen <= length_in_buff);
			ndlbuf_sub_data(pbuf, (size_t)flushlen);
		}
		length_in_buff = ndlbuf_datalen(pbuf);

	}
	if (length_in_buff == 0) {
		ret = __tcpnode_send_with_save(node, msg_buf, datalen);
	}
	else {
		size_t space_len = ndlbuf_free_capacity(pbuf);
		if(is_write_all && space_len < datalen) {
			node->myerrno = NDERR_WOULD_BLOCK;
			ret = -1;
		}
		else {
			ret = ndlbuf_write(pbuf, (void*)msg_buf, datalen, EBUF_SPECIFIED);
		}
	}
	LEAVE_FUNC();
	return ret ;
}
Example #3
0
void NDHttpRequest::InData(const char *data, int size)
{
	ndlbuf_write(&m_recvBuf, (char*)data, size, 0) ;
	while (m_parseStat < 3 && ParseData() > 0) {
		if (_getDataSize() ==0) {
			break ;
		}
	}
}