python3でプロセスを実行していますが、cライブラリを呼び出すモジュールを作成する必要がありますが、c libでは、python3から接続されたソケットを呼び出す必要があり、結果はpython3になります。
[python3] ---> [c]--->[cソケット]--->[pythonソケット]----->[c関数]----->[python3]
PythonタイプのソケットをCタイプのソケットに変換する方法は?
例を教えてください、ありがとう!
AC ソケットは単なるファイル記述子であり、番号で参照されます。
Python ソケットは、ファイル記述子をラップするオブジェクトです。メソッドを使用して、ファイル記述子番号を取得できますfileno
。
例えば:
def call_c_code_with_socket(my_socket):
c_library.c_func(my_socket.fileno())
(ここでは POSIX を使用していると仮定しています。Windowsでは、単純な整数の代わりにWSASocket
不透明なハンドルを扱う and friendsを通常使用するため、もう少し複雑です。)SOCKET
反対側に行くのは少しトリッキーです。
C でソケットを作成し、それを Python で使用したい場合は、fd 番号だけでなく、ファミリ、タイプ、プロトの値も必要ですが、それらがある場合はそれがfromfd
答えです。
ただし、Python でソケットを作成し、そのファイル記述子を C に送信し、それを取得する場合、新しいソケット オブジェクトを作成する必要はありません。あなたは古いものを見つけたいです。その場合は、fd 番号をオブジェクトにdict
マッピングすることを検討してください。socket
最後に、奇妙なことを別のコードで行って、コードの一部を混同しないように注意してください。次のプロトコル メッセージの半分を C のバッファーに読み込んだ場合、Python はその半分のメッセージを必要とします。Python でソケットを非ブロック モードに設定した場合、C でも非ブロックになります。