0

python3でプロセスを実行していますが、cライブラリを呼び出すモジュールを作成する必要がありますが、c libでは、python3から接続されたソケットを呼び出す必要があり、結果はpython3になります。

[python3] ---> [c]--->[cソケット]--->[pythonソケット]----->[c関数]----->[python3]

PythonタイプのソケットをCタイプのソケットに変換する方法は?

例を教えてください、ありがとう!

4

1 に答える 1

2

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 でも非ブロックになります。

于 2013-03-13T05:00:10.240 に答える