summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Wragg <dpw@lshift.net>2010-05-30 23:31:40 +0100
committerDavid Wragg <dpw@lshift.net>2010-05-30 23:31:40 +0100
commit2347dc9977d3bf0c9ed19f7ed3a905eb4e65fa46 (patch)
tree56b6486c279997736c61a5b3fe6661caadb7d352
parent76e825b388c6c3b65ef238a245748f38d3f1c1fc (diff)
downloadrabbitmq-c-github-ask-2347dc9977d3bf0c9ed19f7ed3a905eb4e65fa46.tar.gz
Add amqp_end_connection, which closes the socket and destroys the connection
-rw-r--r--examples/amqp_bind.c3
-rw-r--r--examples/amqp_consumer.c3
-rw-r--r--examples/amqp_exchange_declare.c3
-rw-r--r--examples/amqp_listen.c3
-rw-r--r--examples/amqp_listenq.c3
-rw-r--r--examples/amqp_producer.c3
-rw-r--r--examples/amqp_sendstring.c3
-rw-r--r--examples/amqp_unbind.c3
-rw-r--r--librabbitmq/amqp.h1
-rw-r--r--librabbitmq/amqp_connection.c9
-rw-r--r--tools/common.c11
11 files changed, 23 insertions, 22 deletions
diff --git a/examples/amqp_bind.c b/examples/amqp_bind.c
index 697df2a..cf7c377 100644
--- a/examples/amqp_bind.c
+++ b/examples/amqp_bind.c
@@ -99,7 +99,6 @@ int main(int argc, char const * const *argv) {
die_on_amqp_error(amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS), "Closing channel");
die_on_amqp_error(amqp_connection_close(conn, AMQP_REPLY_SUCCESS), "Closing connection");
- amqp_destroy_connection(conn);
- die_on_error(close(sockfd), "Closing socket");
+ die_on_error(amqp_end_connection(conn), "Ending connection");
return 0;
}
diff --git a/examples/amqp_consumer.c b/examples/amqp_consumer.c
index aa33639..331fe1d 100644
--- a/examples/amqp_consumer.c
+++ b/examples/amqp_consumer.c
@@ -180,8 +180,7 @@ int main(int argc, char const * const *argv) {
die_on_amqp_error(amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS), "Closing channel");
die_on_amqp_error(amqp_connection_close(conn, AMQP_REPLY_SUCCESS), "Closing connection");
- amqp_destroy_connection(conn);
- die_on_error(close(sockfd), "Closing socket");
+ die_on_error(amqp_end_connection(conn), "Ending connection");
return 0;
}
diff --git a/examples/amqp_exchange_declare.c b/examples/amqp_exchange_declare.c
index 14bc163..32e71b0 100644
--- a/examples/amqp_exchange_declare.c
+++ b/examples/amqp_exchange_declare.c
@@ -94,7 +94,6 @@ int main(int argc, char const * const *argv) {
die_on_amqp_error(amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS), "Closing channel");
die_on_amqp_error(amqp_connection_close(conn, AMQP_REPLY_SUCCESS), "Closing connection");
- amqp_destroy_connection(conn);
- die_on_error(close(sockfd), "Closing socket");
+ die_on_error(amqp_end_connection(conn), "Ending connection");
return 0;
}
diff --git a/examples/amqp_listen.c b/examples/amqp_listen.c
index 0162ce6..c1401ee 100644
--- a/examples/amqp_listen.c
+++ b/examples/amqp_listen.c
@@ -187,8 +187,7 @@ int main(int argc, char const * const *argv) {
die_on_amqp_error(amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS), "Closing channel");
die_on_amqp_error(amqp_connection_close(conn, AMQP_REPLY_SUCCESS), "Closing connection");
- amqp_destroy_connection(conn);
- die_on_error(close(sockfd), "Closing socket");
+ die_on_error(amqp_end_connection(conn), "Ending connection");
return 0;
}
diff --git a/examples/amqp_listenq.c b/examples/amqp_listenq.c
index 9100dec..00dd2d7 100644
--- a/examples/amqp_listenq.c
+++ b/examples/amqp_listenq.c
@@ -171,8 +171,7 @@ int main(int argc, char const * const *argv) {
die_on_amqp_error(amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS), "Closing channel");
die_on_amqp_error(amqp_connection_close(conn, AMQP_REPLY_SUCCESS), "Closing connection");
- amqp_destroy_connection(conn);
- die_on_error(close(sockfd), "Closing socket");
+ die_on_error(amqp_end_connection(conn), "Ending connection");
return 0;
}
diff --git a/examples/amqp_producer.c b/examples/amqp_producer.c
index ac6eebc..94c529d 100644
--- a/examples/amqp_producer.c
+++ b/examples/amqp_producer.c
@@ -151,7 +151,6 @@ int main(int argc, char const * const *argv) {
die_on_amqp_error(amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS), "Closing channel");
die_on_amqp_error(amqp_connection_close(conn, AMQP_REPLY_SUCCESS), "Closing connection");
- amqp_destroy_connection(conn);
- die_on_error(close(sockfd), "Closing socket");
+ die_on_error(amqp_end_connection(conn), "Ending connection");
return 0;
}
diff --git a/examples/amqp_sendstring.c b/examples/amqp_sendstring.c
index 6e8e0b6..e669505 100644
--- a/examples/amqp_sendstring.c
+++ b/examples/amqp_sendstring.c
@@ -108,7 +108,6 @@ int main(int argc, char const * const *argv) {
die_on_amqp_error(amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS), "Closing channel");
die_on_amqp_error(amqp_connection_close(conn, AMQP_REPLY_SUCCESS), "Closing connection");
- amqp_destroy_connection(conn);
- die_on_error(close(sockfd), "Closing socket");
+ die_on_error(amqp_end_connection(conn), "Ending connection");
return 0;
}
diff --git a/examples/amqp_unbind.c b/examples/amqp_unbind.c
index 27df916..bc92efe 100644
--- a/examples/amqp_unbind.c
+++ b/examples/amqp_unbind.c
@@ -99,7 +99,6 @@ int main(int argc, char const * const *argv) {
die_on_amqp_error(amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS), "Closing channel");
die_on_amqp_error(amqp_connection_close(conn, AMQP_REPLY_SUCCESS), "Closing connection");
- amqp_destroy_connection(conn);
- die_on_error(close(sockfd), "Closing socket");
+ die_on_error(amqp_end_connection(conn), "Ending connection");
return 0;
}
diff --git a/librabbitmq/amqp.h b/librabbitmq/amqp.h
index 139de5d..b67d6c8 100644
--- a/librabbitmq/amqp.h
+++ b/librabbitmq/amqp.h
@@ -310,6 +310,7 @@ extern int amqp_tune_connection(amqp_connection_state_t state,
int heartbeat);
int amqp_get_channel_max(amqp_connection_state_t state);
extern void amqp_destroy_connection(amqp_connection_state_t state);
+extern int amqp_end_connection(amqp_connection_state_t state);
extern int amqp_handle_input(amqp_connection_state_t state,
amqp_bytes_t received_data,
diff --git a/librabbitmq/amqp_connection.c b/librabbitmq/amqp_connection.c
index 8623eed..7531fac 100644
--- a/librabbitmq/amqp_connection.c
+++ b/librabbitmq/amqp_connection.c
@@ -170,6 +170,15 @@ void amqp_destroy_connection(amqp_connection_state_t state) {
free(state);
}
+int amqp_end_connection(amqp_connection_state_t state) {
+ int s = state->sockfd;
+ amqp_destroy_connection(state);
+ if (close(s) < 0)
+ return -errno;
+ else
+ return 0;
+}
+
static void return_to_idle(amqp_connection_state_t state) {
state->inbound_buffer.bytes = NULL;
state->inbound_offset = 0;
diff --git a/tools/common.c b/tools/common.c
index 6c0e871..d4771ac 100644
--- a/tools/common.c
+++ b/tools/common.c
@@ -245,16 +245,15 @@ amqp_connection_state_t make_connection(void)
void close_connection(amqp_connection_state_t conn)
{
- int s = amqp_get_sockfd(conn);
-
+ int res;
die_rpc(amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS),
"closing channel");
die_rpc(amqp_connection_close(conn, AMQP_REPLY_SUCCESS),
"closing connection");
- amqp_destroy_connection(conn);
-
- if (close(s) < 0)
- die_errno(errno, "closing socket");
+
+ res = amqp_end_connection(conn);
+ if (res < 0)
+ die_errno(-res, "closing connection");
}
amqp_bytes_t read_all(int fd)