summaryrefslogtreecommitdiff
path: root/src/daemon/dlt_daemon_socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/daemon/dlt_daemon_socket.c')
-rw-r--r--src/daemon/dlt_daemon_socket.c64
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;
-}