thank for answer, so if i have mean, i can call free on on_connect(uv_connect_t *connection, int status) for the connection parameter and call onlcose only for the real socket.. right?
Il giorno mercoledì 2 luglio 2014 11:47:02 UTC+2, Fedor Indutny ha scritto: > > Hello! > > You don't need to `uv_close()` any request, just release the memory in > their callbacks. > This applies to `uv_write_t`, `uv_connect_t` and everything that doesn't > inherit from handle. > > `uv_close()` is closing underlying socket, so please call it only when you > are done with the socket and > do not want to receive or send anything on it. > > Cheers, > Fedor. > > > On Wed, Jul 2, 2014 at 1:40 PM, Claudio Bisegni <[email protected] > <javascript:>> wrote: > >> Hi i have some problem to well understand the libuv functionality on when >> deallocate the handler and stream. >> >> i have a cpp class that have a one uv_tcp_t instance for the client. >> When i need to send data to one server i do the following step: >> >> i use a struct RequestInfo * ri to keep the reference to the >> tcp_connection for close it. >> >> 1) allocate the connection with ri->tcp_connection = (uv_connect_t*) >> malloc(sizeof(uv_connect_t)); >> 2) call the uv_tcp_connect(ri->tcp_connection, &client, (const struct >> sockaddr*)&req_addr, TCPUVClient::on_connect); where the 'client' is the >> unique instance of uv_tcp_t; >> 3) below my on connect: >> >> void TCPUVClient::on_connect(uv_connect_t *connection, int status) { >> >> RequestInfo *ri = static_cast<RequestInfo*>(connection->data); >> >> if (status) { >> >> TCPUVClientLERR << "error on_connect" << status; >> >> uv_close((uv_handle_t*)connection,TCPUVClient::on_close); >> >> DEALLOCATE_REQUEST_INFO(ri) >> >> return; >> >> } >> >> >> //get the data to send >> >> ri->serializationBuffer = ri->messageInfo->message->getBSONData(); >> >> //initialize uv buffer >> >> uv_buf_t buf = >> uv_buf_init((char*)ri->serializationBuffer->getBufferPtr(), (unsigned >> int)ri->serializationBuffer->getBufferLen()); >> >> //connect data to stream handler >> >> connection->handle->data = connection->data; >> >> uv_write_t request; >> >> uv_write(&request, connection->handle, &buf, 1, >> TCPUVClient::on_write_end); >> >> } >> >> >> 4) after the data is sent i need to read the ack answer with: >> >> void TCPUVClient::on_ack_read(uv_stream_t *stream, ssize_t nread, const >> uv_buf_t* buf) { >> >> //delete the forward info class >> >> RequestInfo *ri = static_cast<RequestInfo*>(stream->data); >> >> stream->data = NULL; >> >> if (nread>0) { >> >> auto_ptr<chaos::common::data::CDataWrapper> ack_result(new >> chaos::common::data::CDataWrapper(buf->base)); >> >> LDBG_ << "TCPUVClient::on_ack_read message >> result------------------------------"; >> >> LDBG_ << ack_result->getJSONString(); >> >> LDBG_ << "TCPUVClient::on_ack_read message >> result------------------------------"; >> >> //uv_close((uv_handle_t*) server, TCPUVClient::on_close); >> >> return; >> >> } >> >> uv_close((uv_handle_t*)stream, TCPUVClient::on_close); >> >> free(buf->base); >> >> DEALLOCATE_REQUEST_INFO(ri) >> >> } >> >> >> void TCPUVClient::on_write_end(uv_write_t *req, int status) { >> >> RequestInfo *ri = static_cast<RequestInfo*>(req->data); >> >> if (status) { >> >> TCPUVClientLERR << "error on_write_end ->" << status; >> >> uv_close((uv_handle_t*)ri->tcp_connection,TCPUVClient::on_close); >> >> DEALLOCATE_REQUEST_INFO(ri) >> >> return; >> >> } >> >> uv_read_start(req->handle, TCPUVClient::alloc_buffer, >> TCPUVClient::on_ack_read); >> >> } >> >> >> my question is when i need to call uv_close for: >> >> *uv_write_t *req* contained in on_write_end >> >> *uv_stream_t *stream* contained in on_ack_read >> >> *uv_connect_t** *connection* contained in on_connection >> >> >> the client work but i don't now if i forgot to free memory. >> >> >> thanks in advanced for all group. And there is a good example on how work >> well with libuv? >> >> -- >> You received this message because you are subscribed to the Google Groups >> "libuv" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To post to this group, send email to [email protected] <javascript:> >> . >> Visit this group at http://groups.google.com/group/libuv. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "libuv" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/libuv. For more options, visit https://groups.google.com/d/optout.
