aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2022-07-25 14:47:04 -0700
committerTrumeet <yuuta@yuuta.moe>2022-07-25 14:47:04 -0700
commit219e4bb54375995fa377a1bcf9601a77cf6f1fee (patch)
tree8553a4d24bfb6d2c7197f16aa7ff6d434da13192
parent8f07d4ee8f345feb36c4f1c99eea2fe4f1cdf6e3 (diff)
downloadacron-219e4bb54375995fa377a1bcf9601a77cf6f1fee.tar
acron-219e4bb54375995fa377a1bcf9601a77cf6f1fee.tar.gz
acron-219e4bb54375995fa377a1bcf9601a77cf6f1fee.tar.bz2
acron-219e4bb54375995fa377a1bcf9601a77cf6f1fee.zip
feat(libacron): support force disconnecting without writing anything
API:CHANGE Signed-off-by: Trumeet <yuuta@yuuta.moe>
-rw-r--r--client/libacron/apps/helloworld/main.c2
-rw-r--r--client/libacron/include/net.h4
-rw-r--r--client/libacron/net.c9
3 files changed, 11 insertions, 4 deletions
diff --git a/client/libacron/apps/helloworld/main.c b/client/libacron/apps/helloworld/main.c
index 6201fac..c112fcb 100644
--- a/client/libacron/apps/helloworld/main.c
+++ b/client/libacron/apps/helloworld/main.c
@@ -356,7 +356,7 @@ int main(int argc, char **argv) {
}
}
if ((r = lock())) { goto end; }
- ac_disconnect(connection);
+ ac_disconnect(connection, false);
if ((r = unlock())) { goto end; }
net_close(&sock);
ac_free();
diff --git a/client/libacron/include/net.h b/client/libacron/include/net.h
index 03be12f..6f5619a 100644
--- a/client/libacron/include/net.h
+++ b/client/libacron/include/net.h
@@ -65,10 +65,12 @@ LIBAC_EXPORT int ac_connect(ac_connection_parameters_t parameters, void **out);
* Disconnect the connection.
* The user must manually disconnect the socket passed in during ac_connect.
* @param connection A non-NULL and connected connection passed as-is from ac_connect.
+ * @param force By default (false), libac will gracefully close the socket by writing something to it. If force is true,
+ * libac will directly free any internal structures without writing anything.
* @return AC_E_OK or an error code. When failed, connection is undefined. When succeeds, connection is freed and invalid.
* MT-Unsafe
*/
-LIBAC_EXPORT int ac_disconnect(void *connection);
+LIBAC_EXPORT int ac_disconnect(void *connection, bool force);
/**
* Blocks the current thread until a new response or event arrives.
diff --git a/client/libacron/net.c b/client/libacron/net.c
index 1af752c..b393475 100644
--- a/client/libacron/net.c
+++ b/client/libacron/net.c
@@ -175,11 +175,16 @@ int ac_connect(ac_connection_parameters_t parameters, void **out) {
return AC_E_OK;
}
-int ac_disconnect(void *connection) {
+int ac_disconnect(void *connection,
+ bool force) {
AC_CHECK_INIT;
struct ac_connection *conn = connection;
LOGD("Disconnecting...");
- wic_close(&conn->inst);
+ if (force) {
+ wic_close_with_reason(&conn->inst, WIC_CLOSE_ABNORMAL_1, NULL, 0U);
+ } else {
+ wic_close_with_reason(&conn->inst, WIC_CLOSE_NORMAL, NULL, 0U);
+ }
conn_free(conn);
return AC_E_OK;
}