+/* receive datagram */
+int p2pkp_msgrecv(struct socket *s, struct sockaddr_in *sin, char *buffer, int len)
+{
+ /* message */
+ struct msghdr msg;
+ struct iovec iov;
+
+ /* build message */
+ iov.iov_base = buffer;
+ iov.iov_len = len;
+ msg.msg_name = sin;
+ msg.msg_namelen = sizeof(struct sockaddr_in);
+ msg.msg_iov = &iov;
+ msg.msg_iovlen = 1;
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ msg.msg_flags = 0;
+
+ /* send the message down the socket */
+ return kernel_recvmsg(s, &msg, (struct kvec *) msg.msg_iov, 1, len, 0);
+}
+
+