MCPcopy Index your code
hub / github.com/RustPython/RustPython / sendmsg

Method sendmsg

crates/stdlib/src/socket.rs:1815–1871  ·  view source on GitHub ↗
(
            &self,
            buffers: Vec<ArgBytesLike>,
            ancdata: OptionalArg,
            flags: OptionalArg<i32>,
            addr: OptionalOption,
            vm: &VirtualMachine,
 

Source from the content-addressed store, hash-verified

1813 #[cfg(all(unix, not(target_os = "redox")))]
1814 #[pymethod]
1815 fn sendmsg(
1816 &self,
1817 buffers: Vec<ArgBytesLike>,
1818 ancdata: OptionalArg,
1819 flags: OptionalArg<i32>,
1820 addr: OptionalOption,
1821 vm: &VirtualMachine,
1822 ) -> PyResult<usize> {
1823 let flags = flags.unwrap_or(0);
1824 let mut msg = socket2::MsgHdr::new();
1825
1826 let sockaddr;
1827 if let Some(addr) = addr.flatten() {
1828 sockaddr = self
1829 .extract_address(addr, "sendmsg", vm)
1830 .map_err(|e| e.into_pyexception(vm))?;
1831 msg = msg.with_addr(&sockaddr);
1832 }
1833
1834 let buffers = buffers
1835 .iter()
1836 .map(|buf| buf.borrow_buf())
1837 .collect::<Vec<_>>();
1838 let buffers = buffers
1839 .iter()
1840 .map(|buf| io::IoSlice::new(buf))
1841 .collect::<Vec<_>>();
1842 msg = msg.with_buffers(&buffers);
1843
1844 let control_buf;
1845 if let OptionalArg::Present(ancdata) = ancdata {
1846 let cmsgs = vm.extract_elements_with(
1847 &ancdata,
1848 |obj| -> PyResult<(i32, i32, ArgBytesLike)> {
1849 let seq: Vec<PyObjectRef> = obj.try_into_value(vm)?;
1850 let [lvl, typ, data]: [PyObjectRef; 3] = seq
1851 .try_into()
1852 .map_err(|_| vm.new_type_error("expected a sequence of length 3"))?;
1853 Ok((
1854 lvl.try_into_value(vm)?,
1855 typ.try_into_value(vm)?,
1856 data.try_into_value(vm)?,
1857 ))
1858 },
1859 )?;
1860 control_buf = Self::pack_cmsgs_to_send(&cmsgs, vm)?;
1861 if !control_buf.is_empty() {
1862 msg = msg.with_control(&control_buf);
1863 }
1864 }
1865
1866 self.sock_op(vm, SelectKind::Write, || {
1867 let sock = self.sock()?;
1868 sock.sendmsg(&msg, flags)
1869 })
1870 .map_err(|e| e.into_pyexception(vm))
1871 }
1872

Callers

nothing calls this directly

Calls 12

newFunction · 0.85
extract_addressMethod · 0.80
extract_elements_withMethod · 0.80
try_into_valueMethod · 0.80
sock_opMethod · 0.80
sockMethod · 0.80
flattenMethod · 0.45
into_pyexceptionMethod · 0.45
mapMethod · 0.45
iterMethod · 0.45
borrow_bufMethod · 0.45
is_emptyMethod · 0.45

Tested by

no test coverage detected