diff options
Diffstat (limited to 'src/daemon/dlt_daemon_socket.c')
-rw-r--r-- | src/daemon/dlt_daemon_socket.c | 64 |
1 files changed, 33 insertions, 31 deletions
diff --git a/src/daemon/dlt_daemon_socket.c b/src/daemon/dlt_daemon_socket.c index 521b3e6..c85798f 100644 --- a/src/daemon/dlt_daemon_socket.c +++ b/src/daemon/dlt_daemon_socket.c @@ -146,53 +146,62 @@ int dlt_daemon_socket_close(int sock) int dlt_daemon_socket_send(int sock,void* data1,int size1,void* data2,int size2,char serialheader) { - /* Optional: Send serial header, if requested */ int ret = DLT_RETURN_OK; + int bytes_sent = 0; + + /* Optional: Send serial header, if requested */ if (serialheader) { - ret = dlt_daemon_socket_sendreliable(sock, (void *) dltSerialHeader, sizeof(dltSerialHeader)); - if(ret != DLT_RETURN_OK) + ret = dlt_daemon_socket_sendreliable(sock, + (void *) dltSerialHeader, + sizeof(dltSerialHeader), + &bytes_sent); + if (ret != DLT_RETURN_OK) return ret; } /* Send data */ - if(data1 != NULL && size1 > 0) + + if ((data1 != NULL) && (size1 > 0)) { - ret = dlt_daemon_socket_sendreliable(sock, data1, size1); - if(ret != DLT_RETURN_OK) + ret = dlt_daemon_socket_sendreliable(sock, data1, size1, &bytes_sent); + if (ret != DLT_RETURN_OK) + { return ret; + } } - if(data2 != NULL && size2 > 0) + if ((data2 != NULL) && (size2 > 0)) { - ret = dlt_daemon_socket_sendreliable(sock, data2, size2); - if(ret != DLT_RETURN_OK) - return ret; + ret = dlt_daemon_socket_sendreliable(sock, data2, size2, &bytes_sent); } return ret; } -int dlt_daemon_socket_sendreliable(int sock, void* buffer, int message_size) +int dlt_daemon_socket_get_send_qeue_max_size(int sock) +{ + int n = 0; + socklen_t m = sizeof(n); + getsockopt(sock,SOL_SOCKET,SO_SNDBUF,(void *)&n, &m); + + return n; +} + +int dlt_daemon_socket_sendreliable(int sock, void* data_buffer, int message_size, int* bytes_sent) { int data_sent = 0; while (data_sent < message_size) { - ssize_t ret = send(sock, buffer + data_sent, message_size - data_sent, 0); + ssize_t ret = send(sock, data_buffer + data_sent, message_size - data_sent, 0); if (ret < 0) { - const int lastErrno=errno; - if (lastErrno==EINTR || lastErrno==EAGAIN || lastErrno==EWOULDBLOCK) - { - // Temporary error. - dlt_vlog(LOG_INFO,"dlt_daemon_socket_sendreliable: socket send() error %d: %s, trying again.\n", lastErrno, strerror(lastErrno)); - } - else - { - dlt_vlog(LOG_WARNING,"dlt_daemon_socket_sendreliable: socket send() error %d: %s\n", lastErrno, strerror(lastErrno)); - return DLT_DAEMON_ERROR_SEND_FAILED; - } + dlt_vlog(LOG_WARNING, + "dlt_daemon_socket_sendreliable: socket send failed [errno: %d]!\n", + errno); + *bytes_sent = data_sent; + return DLT_DAEMON_ERROR_SEND_FAILED; } else { @@ -200,15 +209,8 @@ int dlt_daemon_socket_sendreliable(int sock, void* buffer, int message_size) } } + *bytes_sent = data_sent; return DLT_DAEMON_ERROR_OK; } -int dlt_daemon_socket_get_send_qeue_max_size(int sock) -{ - int n = 0; - socklen_t m = sizeof(n); - getsockopt(sock,SOL_SOCKET,SO_SNDBUF,(void *)&n, &m); - - return n; -} |