- silc_packet_send(sock, TRUE);
- SILC_UNSET_OUTBUF_PENDING(sock);
+ ret = silc_packet_send(sock, TRUE);
+ if (ret == -2) {
+ if (sock->outbuf && sock->outbuf->len > 0) {
+ /* Couldn't send all data, put the queue back up, we'll send
+ rest later. */
+ SILC_LOG_DEBUG(("Could not purge immediately, sending rest later"));
+ SILC_SET_CONNECTION_FOR_OUTPUT(server->schedule, sock->sock);
+ SILC_SET_OUTBUF_PENDING(sock);
+ return;
+ }
+ } else if (ret == -1) {
+ SILC_LOG_ERROR(("Error purging packet queue, packets dropped"));
+ }
+
+ /* Purged all data */