USB/IP clients¶
A program built on this library is the USB/IP server: it provides a device and listens on TCP 3240. Something else has to import it before an operating system sees a USB device, and that importer is the USB/IP client - the OS's own, or another process using the host API. The client is not part of this library.
flowchart LR
server["<b>your program</b><br>USB: device<br>USB/IP: SERVER<br>listens :3240"]
client["<b>client</b> (the importer)<br>USB: host<br>USB/IP: CLIENT"]
stack["OS USB stack"]
driver["driver"]
client -- "connects" --> server
client --> stack --> driver
(The role table in
Getting Started spells out the
inversion.) Listen where the client can reach you:
dev.plug(via=usbip.USBIP("0.0.0.0", 3240)) binds every interface, while the default
local transport stays on the loopback, which a remote client can never reach.
| Platform | Client | Notes |
|---|---|---|
| Linux | built in (vhci-hcd) |
the reference environment |
| Windows | install one (usbip-win2 / usbip-win) |
in-box drivers bind afterwards |
| macOS | none in-box; one experimental one needing SIP off | prefer a hardware client, or drive with the host API |
| Hardware clients | vendor-specific | any importer speaking the protocol - and the practical answer on macOS |
| No client at all | - | the host API imports and drives the device itself, on any OS |