Open1
Rustビルドエラー expected `SOCKADDR`, found a different `SOCKADDR`
利用しているcrateの依存crate内で、何らかのversion不一致が発生している
error[E0308]: mismatched types
--> C:\Users\masat\.cargo\registry\src\index.crates.io-6f17d22bba15001f\xenet-socket-0.4.0\src\windows.rs:141:27
|
93 | let res = unsafe { windows_sys::Win32::Networking::WinSock::$fn($($arg, )*) };
| -------------------------------------------- arguments to this function are incorrect
...
141 | syscall!(bind(socket, addr.as_ptr(), addr.len()), PartialEq::ne, 0).map(|_| ())
| ^^^^^^^^^^^^^ expected `SOCKADDR`, found a different `SOCKADDR`
Cargo.lockを調べていったところ、
以下の記述があり、
・socket2 0.5.6は、windows-sys 0.52.0を内部で使っている
・dependenciesの "windows-sys 0.48.0"
これが矛盾するため、コンパイルエラーになっているっぽい
[[package]]
name = "xenet-socket"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcc0d89fb9da3c94ef742af3d27d1119131a7c6a03461bf72ee4560388d1eae8"
dependencies = [
"async-io 1.13.0",
"socket2 0.5.6",
"windows-sys 0.48.0",
"xenet-packet",
]
[target.'cfg(windows)'.dependencies.windows-sys]
version = "0.52"
features = [
"Win32_Foundation",
"Win32_Networking_WinSock",
"Win32_System_IO",
"Win32_System_Threading",
"Win32_System_WindowsProgramming",
]
通常は、上記のような問題が発生しないよう、
socket2をdependenciesに追加する場合、
socket2が利用するwindows-sysのバージョンを明示的に書かなければならないっぽい。
例↓
[dependencies]
socket2 = "^0.5.2"
cfg-if = "^1.0"
# Note that version of windows-sys is pinned to version used in socket2 release
# due to use of shared variables like SOCKADDR.
[target."cfg(windows)".dependencies.windows-sys]
version = "^0.48"
features = ["Win32_Networking_WinSock", "Win32_Foundation"]