4

現在、Pythonにはソケットライブラリがあります。

参照http ://docs.python.org/library/socket.html

ただし、このライブラリには、ファイル記述子に基づいて既存のソケットを参照するための機能は含まれていません。私は現在、最初にソケットを開くC ++ライブラリ用のPythonバインディングを開発しており、この開いたソケットを事後にPythonで参照する方法が必要です。これはWindows上にあることに注意してください(ファイルハンドルを無視するクロスプラットフォームの抽象化レイヤーを使用しています)。

コードは次のようになります。

fd = connect(...) # file descriptor
os.read(fd, buffer)
os.close(fd)

os.dupとで見つかった値による重複なしに、ファイル記述子に基づいてソケットオブジェクトを実際に定義する方法を探していますos.dup2

誰かがこれを参照する方法を知っていますか?

4

4 に答える 4

4

この質問はまだ(1週間)回答されていないようですので、解決策を述べます。

ライブラリ内からソケット情報を取得し、をに変換するための内部バインディングを実装しましctypespytuples。アプリケーション自体がラップされているためpy2exe、この変更はエンドユーザーにとって邪魔になりません。

于 2012-08-08T02:08:42.740 に答える
0

これは役に立ちますか?これを使用して、ソケットやファイル記述子をラップし、sock.readto('\ 0')のようなデータのフレーミングに役立つ操作を提供しながら、ファイルのように感じさせることができます。

http://stromberg.dnsalias.org/~strombrg/bufsock.html
于 2012-07-30T20:57:54.887 に答える
0

再度確認してください:

http://docs.python.org/library/socket.html#socket.fromfd

于 2012-07-30T20:26:24.417 に答える
0

socket.fromfd(fd, family, type[, proto])あなたがやりたいことをしているようです。残念ながら、Unixライクなプラットフォームでのみ利用できます。

残念ながら、この機能はWindowsでは利用できないようです。http://bugs.python.org/でバグをログに記録することを検討してください(WindowsソケットオブジェクトをPythonソケットオブジェクトでラップできない理由はわかりません)。

于 2012-07-30T20:26:29.287 に答える