title: Partial read/write issue in sendmsg/recvmsg
body: <p>I am writing a program that passes file descriptors between two processes using <code>sendmsg</code> and <code>recvmsg</code> through domain socket. For sending a file descriptor, additional data is included in <code>msghdr.msg_iov</code> and <code>msghdr.msg_iolen</code>. However, I was informed that similar to normal <code>read</code> and <code>write</code> system call, <code>sendmsg</code> and <code>recvmsg</code> also have partial read/write problem. In this case, will the data in ancillary field be duplicated automatically for each partial data? I am asking this because my implementation requires non-blocking mechanism. Let me use the following example to elaborate it a bit more</p>
  
  <p>Sender: send <code>msghdr</code> data which contains a <code>fd</code> in ancillary field and <code>K</code> bytes in <code>msg_iov</code></p>
  
  <p>Receiver: (1) partial read, <code>K1</code> bytes (2) partial read, <code>K-K1</code> bytes</p>
  
  <p>Now as the above example, I should actually process the data after the step (2) when all data arrive. In this case, can I still correctly extract the <code>fd</code> from the ancillary field? Or does it only appear in the first partial read?</p>