You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2015/02/15 18:23:03 UTC
[2/3] qpid-proton git commit: report read and write errors through
the transport
report read and write errors through the transport
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/01cb00cc
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/01cb00cc
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/01cb00cc
Branch: refs/heads/master
Commit: 01cb00cc9c358e634230fc9b8e14f6e509b3155f
Parents: 9f51b1f
Author: Rafael Schloming <rh...@alum.mit.edu>
Authored: Sun Feb 15 11:36:23 2015 -0500
Committer: Rafael Schloming <rh...@alum.mit.edu>
Committed: Sun Feb 15 11:36:53 2015 -0500
----------------------------------------------------------------------
proton-c/src/posix/io.c | 7 +++++--
proton-c/src/reactor/connection.c | 14 +++++++++++---
2 files changed, 16 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/01cb00cc/proton-c/src/posix/io.c
----------------------------------------------------------------------
diff --git a/proton-c/src/posix/io.c b/proton-c/src/posix/io.c
index 2284f90..d6d0ccd 100644
--- a/proton-c/src/posix/io.c
+++ b/proton-c/src/posix/io.c
@@ -223,7 +223,8 @@ pn_socket_t pn_accept(pn_io_t *io, pn_socket_t socket, char *name, size_t size)
#ifdef MSG_NOSIGNAL
ssize_t pn_send(pn_io_t *io, pn_socket_t socket, const void *buf, size_t len) {
ssize_t count = send(socket, buf, len, MSG_NOSIGNAL);
- io->wouldblock = count < 0 && (errno == EAGAIN || errno == EWOULDBLOCK);
+ io->wouldblock = (errno == EAGAIN || errno == EWOULDBLOCK);
+ if (count < 0) { pn_i_error_from_errno(io->error, "send"); }
return count;
}
@@ -237,7 +238,8 @@ static inline int pn_create_socket(int af) {
#elif defined(SO_NOSIGPIPE)
ssize_t pn_send(pn_io_t *io, pn_socket_t socket, const void *buf, size_t size) {
ssize_t count = send(socket, buf, size, 0);
- io->wouldblock = count < 0 && (errno == EAGAIN || errno == EWOULDBLOCK);
+ io->wouldblock = (errno == EAGAIN || errno == EWOULDBLOCK);
+ if (count < 0) { pn_i_error_from_errno(io->error, "send"); }
return count;
}
@@ -266,6 +268,7 @@ ssize_t pn_recv(pn_io_t *io, pn_socket_t socket, void *buf, size_t size)
{
ssize_t count = recv(socket, buf, size, 0);
io->wouldblock = count < 0 && (errno == EAGAIN || errno == EWOULDBLOCK);
+ if (count < 0) { pn_i_error_from_errno(io->error, "recv"); }
return count;
}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/01cb00cc/proton-c/src/reactor/connection.c
----------------------------------------------------------------------
diff --git a/proton-c/src/reactor/connection.c b/proton-c/src/reactor/connection.c
index dd6fe1c..3560fc5 100644
--- a/proton-c/src/reactor/connection.c
+++ b/proton-c/src/reactor/connection.c
@@ -129,7 +129,7 @@ void pni_handle_bound(pn_reactor_t *reactor, pn_event_t *event) {
// invalid sockets are ignored by poll, so we need to do this manualy
if (sock == PN_INVALID_SOCKET) {
pn_condition_t *cond = pn_transport_condition(transport);
- pn_condition_set_name(cond, "proton:connect");
+ pn_condition_set_name(cond, "proton:io");
pn_condition_set_description(cond, pn_error_text(pn_io_error(pn_reactor_io(reactor))));
pn_transport_close_tail(transport);
pn_transport_close_head(transport);
@@ -155,7 +155,11 @@ static void pni_connection_readable(pn_selectable_t *sel)
pn_transport_tail(transport), capacity);
if (n <= 0) {
if (n == 0 || !pn_wouldblock(pn_reactor_io(reactor))) {
- if (n < 0) perror("recv");
+ if (n < 0) {
+ pn_condition_t *cond = pn_transport_condition(transport);
+ pn_condition_set_name(cond, "proton:io");
+ pn_condition_set_description(cond, pn_error_text(pn_io_error(pn_reactor_io(reactor))));
+ }
pn_transport_close_tail(transport);
}
} else {
@@ -182,7 +186,11 @@ static void pni_connection_writable(pn_selectable_t *sel)
pn_transport_head(transport), pending);
if (n < 0) {
if (!pn_wouldblock(pn_reactor_io(reactor))) {
- perror("send");
+ pn_condition_t *cond = pn_transport_condition(transport);
+ if (!pn_condition_is_set(cond)) {
+ pn_condition_set_name(cond, "proton:io");
+ pn_condition_set_description(cond, pn_error_text(pn_io_error(pn_reactor_io(reactor))));
+ }
pn_transport_close_head(transport);
}
} else {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org