問題タブ [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.

0 投票する
0 に答える
139 参照

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 権限を与えることができません。

前もって感謝します

0 投票する
2 に答える
271 参照

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() が失敗する原因は何ですか?