207 |
207 |
}
|
208 |
208 |
QTAILQ_INSERT_TAIL(&net_clients, nc, next);
|
209 |
209 |
|
210 |
|
nc->send_queue = qemu_new_net_queue(nc);
|
|
210 |
nc->incoming_queue = qemu_new_net_queue(nc);
|
211 |
211 |
nc->destructor = destructor;
|
212 |
212 |
}
|
213 |
213 |
|
... | ... | |
289 |
289 |
|
290 |
290 |
static void qemu_free_net_client(NetClientState *nc)
|
291 |
291 |
{
|
292 |
|
if (nc->send_queue) {
|
293 |
|
qemu_del_net_queue(nc->send_queue);
|
|
292 |
if (nc->incoming_queue) {
|
|
293 |
qemu_del_net_queue(nc->incoming_queue);
|
294 |
294 |
}
|
295 |
295 |
if (nc->peer) {
|
296 |
296 |
nc->peer->peer = NULL;
|
... | ... | |
431 |
431 |
return;
|
432 |
432 |
}
|
433 |
433 |
|
434 |
|
qemu_net_queue_purge(nc->peer->send_queue, nc);
|
|
434 |
qemu_net_queue_purge(nc->peer->incoming_queue, nc);
|
435 |
435 |
}
|
436 |
436 |
|
437 |
437 |
void qemu_flush_queued_packets(NetClientState *nc)
|
... | ... | |
444 |
444 |
}
|
445 |
445 |
return;
|
446 |
446 |
}
|
447 |
|
if (qemu_net_queue_flush(nc->send_queue)) {
|
|
447 |
if (qemu_net_queue_flush(nc->incoming_queue)) {
|
448 |
448 |
/* We emptied the queue successfully, signal to the IO thread to repoll
|
449 |
449 |
* the file descriptor (for tap, for example).
|
450 |
450 |
*/
|
... | ... | |
468 |
468 |
return size;
|
469 |
469 |
}
|
470 |
470 |
|
471 |
|
queue = sender->peer->send_queue;
|
|
471 |
queue = sender->peer->incoming_queue;
|
472 |
472 |
|
473 |
473 |
return qemu_net_queue_send(queue, sender, flags, buf, size, sent_cb);
|
474 |
474 |
}
|
... | ... | |
543 |
543 |
return iov_size(iov, iovcnt);
|
544 |
544 |
}
|
545 |
545 |
|
546 |
|
queue = sender->peer->send_queue;
|
|
546 |
queue = sender->peer->incoming_queue;
|
547 |
547 |
|
548 |
548 |
return qemu_net_queue_send_iov(queue, sender,
|
549 |
549 |
QEMU_NET_PACKET_FLAG_NONE,
|