diff --git a/lib/ngtcp2_conn.c b/lib/ngtcp2_conn.c
index ca7123d32ccd1a6c9a5084e0cfac81ab76c8a11e..a3716ea18f091c32e486493725ddebff43a1da15 100644
--- a/lib/ngtcp2_conn.c
+++ b/lib/ngtcp2_conn.c
@@ -8594,6 +8594,7 @@ ngtcp2_ssize ngtcp2_conn_write_connection_close(ngtcp2_conn *conn,
   }
 
   switch (conn->state) {
+  case NGTCP2_CS_CLIENT_INITIAL:
   case NGTCP2_CS_CLOSING:
   case NGTCP2_CS_DRAINING:
     return NGTCP2_ERR_INVALID_STATE;
diff --git a/tests/ngtcp2_conn_test.c b/tests/ngtcp2_conn_test.c
index df149bb1fef4300fdf8470356b8e3ee57023965a..5218323ee87b5778d3d922f840c0012c8c152f85 100644
--- a/tests/ngtcp2_conn_test.c
+++ b/tests/ngtcp2_conn_test.c
@@ -5243,6 +5243,10 @@ void test_ngtcp2_conn_write_connection_close(void) {
   /* Client only Initial key */
   setup_handshake_client(&conn);
 
+  spktlen = ngtcp2_conn_write_pkt(conn, NULL, buf, sizeof(buf), 0);
+
+  CU_ASSERT(spktlen > 0);
+
   spktlen = ngtcp2_conn_write_connection_close(conn, NULL, buf, sizeof(buf),
                                                NGTCP2_NO_ERROR, 0);
 
@@ -5259,6 +5263,10 @@ void test_ngtcp2_conn_write_connection_close(void) {
   /* Client has Initial and Handshake keys */
   setup_handshake_client(&conn);
 
+  spktlen = ngtcp2_conn_write_pkt(conn, NULL, buf, sizeof(buf), 0);
+
+  CU_ASSERT(spktlen > 0);
+
   ngtcp2_conn_install_tx_handshake_key(conn, null_key, null_iv, null_hp_key,
                                        sizeof(null_key), sizeof(null_iv));
   ngtcp2_conn_set_aead_overhead(conn, NGTCP2_FAKE_AEAD_OVERHEAD);