+static void handle_sk_entry(struct sk_out *sk_out, struct sk_entry *entry)
+{
+ if (entry->flags & SK_F_SIMPLE) {
+ uint64_t tag = 0;
+
+ if (entry->tagptr)
+ tag = *entry->tagptr;
+
+ fio_net_send_simple_cmd(sk_out->sk, entry->opcode, tag, NULL);
+ } else
+ fio_net_send_cmd(sk_out->sk, entry->opcode, entry->buf, entry->size, entry->tagptr, NULL);
+
+ if (entry->flags & SK_F_FREE)
+ free(entry->buf);
+ else if (entry->flags & SK_F_COPY)
+ sfree(entry->buf);
+
+ sfree(entry);
+}
+
+static void handle_xmits(struct sk_out *sk_out)
+{
+ struct sk_entry *entry;
+ FLIST_HEAD(list);
+
+ sk_lock(sk_out);
+ if (flist_empty(&sk_out->list)) {
+ sk_unlock(sk_out);
+ return;
+ }
+
+ flist_splice_init(&sk_out->list, &list);
+ sk_unlock(sk_out);
+
+ while (!flist_empty(&list)) {
+ entry = flist_entry(list.next, struct sk_entry, list);
+ flist_del(&entry->list);
+ handle_sk_entry(sk_out, entry);
+ }
+}
+
+static int handle_connection(struct sk_out *sk_out)