recv_fds(sock, bufsize, maxfds[, flags]) -> (data, list of file descriptors, msg_flags, address) Receive up to maxfds file descriptors returning the message data and a list containing the descriptors.
(sock, bufsize, maxfds, flags=0)
| 577 | |
| 578 | if hasattr(_socket.socket, "recvmsg"): |
| 579 | def recv_fds(sock, bufsize, maxfds, flags=0): |
| 580 | """ recv_fds(sock, bufsize, maxfds[, flags]) -> (data, list of file |
| 581 | descriptors, msg_flags, address) |
| 582 | |
| 583 | Receive up to maxfds file descriptors returning the message |
| 584 | data and a list containing the descriptors. |
| 585 | """ |
| 586 | import array |
| 587 | |
| 588 | # Array of ints |
| 589 | fds = array.array("i") |
| 590 | msg, ancdata, flags, addr = sock.recvmsg(bufsize, |
| 591 | _socket.CMSG_LEN(maxfds * fds.itemsize)) |
| 592 | for cmsg_level, cmsg_type, cmsg_data in ancdata: |
| 593 | if (cmsg_level == _socket.SOL_SOCKET and cmsg_type == _socket.SCM_RIGHTS): |
| 594 | fds.frombytes(cmsg_data[: |
| 595 | len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) |
| 596 | |
| 597 | return msg, list(fds), flags, addr |
| 598 | __all__.append("recv_fds") |
| 599 | |
| 600 | if hasattr(_socket.socket, "share"): |