Fix return value of mdp_send()

This commit is contained in:
Andrew Bettison 2014-04-16 19:08:42 +09:30
parent 5d9e3f1287
commit 67e3079aa3
4 changed files with 25 additions and 12 deletions

View File

@ -1149,14 +1149,12 @@ int app_mdp_ping(const struct cli_parsed *parsed, struct cli_context *context)
*seq=sequence_number;
write_uint64(&payload[4], gettime_ms());
int r = mdp_send(mdp_sockfd, &mdp_header, payload, sizeof(payload));
if (r<0){
WARN_perror("mdp_send");
}else{
if (r != -1) {
sequence_number++;
tx_count++;
}
}
/* Now look for replies until one second has passed, and print any replies
with appropriate information as required */
time_ms_t now = gettime_ms();
@ -2397,10 +2395,8 @@ static int handle_pins(const struct cli_parsed *parsed, struct cli_context *UNUS
len += sizeof(sid);
}
if (!mdp_send(mdp_sock, &header, request_payload, len)){
WHY_perror("mdp_send");
if (mdp_send(mdp_sock, &header, request_payload, len) == -1)
goto end;
}
time_ms_t timeout=gettime_ms()+500;
while(1){
@ -2459,10 +2455,8 @@ int app_id_list(const struct cli_parsed *parsed, struct cli_context *context)
goto end;
}
if (!mdp_send(mdp_sock, &header, request_payload, len)){
WHY_perror("mdp_send");
if (mdp_send(mdp_sock, &header, request_payload, len) == -1)
goto end;
}
const char *names[]={
"sid"

View File

@ -71,8 +71,18 @@ int mdp_send(int socket, const struct mdp_header *header, const uint8_t *payload
}
}
};
return send_message(socket, &addr, &data);
ssize_t sent = send_message(socket, &addr, &data);
if (sent == -1)
return -1;
if ((size_t)sent != sizeof *header + len)
return WHYF("send_message(%d,%s,%s) returned %zd, expecting %zd",
socket,
alloca_socket_address(&addr),
alloca_fragmented_data(&data),
(size_t)sent,
sizeof *header + len
);
return 0;
}
ssize_t mdp_recv(int socket, struct mdp_header *header, uint8_t *payload, ssize_t max_len)

View File

@ -409,6 +409,11 @@ strbuf strbuf_append_socket_address(strbuf sb, const struct socket_address *addr
return strbuf_append_sockaddr(sb, &addr->addr, addr->addrlen);
}
strbuf strbuf_append_fragmented_data(strbuf sb, const struct fragmented_data *data)
{
return strbuf_append_iovec(sb, data->iov, data->fragment_count);
}
strbuf strbuf_append_strftime(strbuf sb, const char *format, const struct tm *tm)
{
// First, try calling strftime(3) directly on the buffer in the strbuf, if there is one and it

View File

@ -143,6 +143,10 @@ struct socket_address;
strbuf strbuf_append_socket_address(strbuf sb, const struct socket_address *addr);
#define alloca_socket_address(addr) strbuf_str(strbuf_append_socket_address(strbuf_alloca(200), (addr)))
struct fragmented_data;
strbuf strbuf_append_fragmented_data(strbuf sb, const struct fragmented_data *data);
#define alloca_fragmented_data(data) strbuf_str(strbuf_append_fragmented_data(strbuf_alloca(200), (data)))
/* Append a strftime(3) string.
* @author Andrew Bettison <andrew@servalproject.com>
*/