問題タブ [setsockopt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 同じものを作成したプロセス以外の別のプロセスで UDP ソケットのソケット オプションを設定することは可能ですか?
プロセス A 経由で UDP ソケットを作成しました。ただし、プロセス A には、Linux の setsockopt API を使用してソケット オプションを設定し、ブロードキャスト IP (255.255.255.255) にバインドするルート アクセス権がありません。
したがって、このジョブを実行するためのルート権限を持つ別のプロセス B を作成しました。ソケット ハンドルを新しいプロセス B に渡し、以下のようにソケット オプションを設定しようとしています。
setsockopt(iSocket_UDP_Client_bcast, SOL_SOCKET, SO_BINDTODEVICE, pszDeviceName, sizeof(strlen(pszDeviceName)))
ただし、プロセス B にルート権限があるにもかかわらず、ソケット オプションの設定に成功しません。
誰かがこれを手伝ったり、これを行うための他の方法を提案したりできますか?
PS : メイン プロセス A に root 権限を与えることができません。
前もって感謝します
python - pythonでのsocketcan J1939フィルタの使用
Python では、Linux カーネル ドキュメントに記載されているように、J1939 フィルタリングを使用しようとしています: https://www.kernel.org/doc/html/latest/networking/j1939.html
次のコードは、setsockopt() 行 (フィルターのセットアップ) で失敗します。
まず、カーネルのドキュメントには、SOL_CAN_J1939 を最初の引数として使用することが記載されています。ただし、socket パッケージには socket.SOL_CAN_J1939 は存在しません。したがって、この場所のコードを見ると、この int 値が 107 であることを理解できました: http://socket-can.996257.n3.nabble.com/RFC-v3-0-6-CAN-add-SAE -J1939-プロトコル-td7571.html
setsockopt() の 3 番目の引数については、j1939_filter 構造 (前のリンクのコードで説明されているように 26 バイト) に一致するようにフィルターをパックしました。これは、raw CAN の can.interfaces.socketcan.utils で行われていることと似ています。
setsockopt() が失敗する原因は何ですか?