diff --git a/core/dap_circular_buffer.c b/core/dap_circular_buffer.c index fba6592847c2d568ff7322d71f498d2d03f0d96c..adb4aa212ad4eeeeafe4068859f41502976989d2 100755 --- a/core/dap_circular_buffer.c +++ b/core/dap_circular_buffer.c @@ -62,13 +62,13 @@ size_t circular_buffer_get_data_size(circular_buffer_t cBuf) return cBuf->dataSize; } -void circular_buffer_push(circular_buffer_t cBuf,void *src, size_t length) +void circular_buffer_push(circular_buffer_t cBuf, const void *src, size_t length) { if(length == 0) return; size_t writableLen = length; - void *pSrc = src; + const void *pSrc = src; if(writableLen > cBuf->capacity)//in case of size overflow { @@ -164,8 +164,18 @@ int circular_buffer_write_In_socket(circular_buffer_t cBuf, int sockfd) { if(cBuf->headOffset + cBuf->dataSize <= cBuf->capacity) { - log_it(L_CRITICAL, "We always trying write all data!"); - abort(); + rdLen = send(sockfd, + &cBuf->buffer[cBuf->headOffset], + cBuf->dataSize, MSG_DONTWAIT | MSG_NOSIGNAL); + + if(rdLen < 0) { + log_it(L_ERROR, "Can't write data in socket. %s", strerror(errno)); + return -1; + } + + cBuf->headOffset += rdLen; + if(cBuf->headOffset == cBuf->capacity) + cBuf->headOffset = 0; } else { diff --git a/core/dap_circular_buffer.h b/core/dap_circular_buffer.h index 5a59da77a9add5ea39c7e2c331dd0f20561f570f..ed7a1fadd615dca3d57502b0ffc53273f4a8a0cd 100755 --- a/core/dap_circular_buffer.h +++ b/core/dap_circular_buffer.h @@ -34,7 +34,7 @@ extern size_t circular_buffer_get_capacity(circular_buffer_t cBuf); extern size_t circular_buffer_get_data_size(circular_buffer_t cBuf); // Push data to the tail of a circular buffer from 'src' with 'length' size in byte. -extern void circular_buffer_push(circular_buffer_t cBuf,void *src, size_t length); +extern void circular_buffer_push(circular_buffer_t cBuf, const void *src, size_t length); // Pop data from a circular buffer to 'dataOut' with wished 'length' size in byte,return the actual data size in byte popped out,which is less or equal to the input 'length parameter. extern size_t circular_buffer_pop(circular_buffer_t cBuf, size_t length, void *dataOut); diff --git a/test/libdap-test b/test/libdap-test index d2257789e0c796a5a3b637e14dcbaf8a8c7880cc..d40ba8973440b7c712d5a64df03a312adcf7c2fd 160000 --- a/test/libdap-test +++ b/test/libdap-test @@ -1 +1 @@ -Subproject commit d2257789e0c796a5a3b637e14dcbaf8a8c7880cc +Subproject commit d40ba8973440b7c712d5a64df03a312adcf7c2fd