Author: rhs
Date: Mon Apr 30 13:55:21 2012
New Revision: 1332207
URL:
http://svn.apache.org/viewvc?rev=1332207&view=revLog:
added stub for setting socket options; use MSG_NOSIGNAL
Modified:
qpid/proton/trunk/proton-c/src/driver.c
Modified: qpid/proton/trunk/proton-c/src/driver.c
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/driver.c?rev=1332207&r1=1332206&r2=1332207&view=diff==============================================================================
--- qpid/proton/trunk/proton-c/src/driver.c (original)
+++ qpid/proton/trunk/proton-c/src/driver.c Mon Apr 30 13:55:21 2012
@@ -176,6 +176,16 @@ void *pn_listener_context(pn_listener_t
return l ? l->context : NULL;
}
+static void pn_configure_sock(int sock) {
+ // this would be nice, but doesn't appear to exist on linux
+ /*
+ int set = 1;
+ if (!setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int))) {
+ perror("setsockopt");
+ };
+ */
+}
+
pn_connector_t *pn_listener_accept(pn_listener_t *l)
{
if (!(l->idx && l->driver && l->driver->fds[l->idx].revents & POLLIN)) {
@@ -198,6 +208,7 @@ pn_connector_t *pn_listener_accept(pn_li
perror("close");
return NULL;
} else {
+ pn_configure_sock(sock);
printf("accepted from %s:%s\n", host, serv);
pn_connector_t *c = pn_connector_fd(l->driver, sock, NULL);
c->listener = l;
@@ -256,6 +267,8 @@ pn_connector_t *pn_connector(pn_driver_t
if (sock == -1)
return NULL;
+ pn_configure_sock(sock);
+
if (connect(sock, addr->ai_addr, addr->ai_addrlen) == -1) {
freeaddrinfo(addr);
return NULL;
@@ -524,7 +537,7 @@ static void pn_connector_process_output(
static void pn_connector_write(pn_connector_t *ctor)
{
if (ctor->output_size > 0) {
- ssize_t n = send(ctor->fd, ctor->output, ctor->output_size, 0);
+ ssize_t n = send(ctor->fd, ctor->output, ctor->output_size, MSG_NOSIGNAL);
if (n < 0) {
// XXX
perror("send");
---------------------------------------------------------------------
To unsubscribe, e-mail:
[hidden email]
For additional commands, e-mail:
[hidden email]