|
|
|
Network Block Device, nbd.c in Linux kernel source. Written by Pavel Machek, pavel@ucw.cz 完整程序的路径:/usr/src/linux/driver/block/nbd.c 程序段节选: /*
* Send or receive packet.
*/
static int nbd_xmit(int send, int sockfd, char *buf, int size)
{
int result;
struct msghdr msg;
struct iovec iov;
unsigned long flags;
sigset_t oldset;
do {
iov.iov_base = buf;
iov.iov_len = size;
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
msg.msg_control = NULL;
msg.msg_controllen = 0;
msg.msg_namelen = 0;
msg.msg_flags = 0;
if (send)
result = sendmsg(sockfd, &msg, 0);
else
result = recvmsg(sockfd, &msg, 0);
if (result <= 0) break;
size -= result;
buf += result;
} while (size > 0);
return result; } |