gpt4 book ai didi

python - 使用 python3 和 c/c++ 嵌入套接字

转载 作者:行者123 更新时间:2023-11-30 14:20:32 25 4
gpt4 key购买 nike

我有一个在python3上运行的进程,它必须创建一个模块来调用c库,但是在c lib中它必须调用从python3连接的套接字,以及python3的结果

[python3]--->[c]--->[c 套接字]--->[python 套接字]----->[c 函数]----->[python3]

如何将python类型的socket转换为c类型的socket?

帮我举个例子,谢谢!

最佳答案

C 套接字只是一个文件描述符,通过数字引用。

Python 套接字是一个包装文件描述符的对象。您可以使用 fileno 从中获取文件描述符编号。方法。

例如:

def call_c_code_with_socket(my_socket):
c_library.c_func(my_socket.fileno())

(我假设你在这里使用 POSIX;在 Windows 上,事情有点复杂,因为你通常使用 WSASocket 和 friend ,它们处理不透明的 SOCKET 句柄而不是简单整数。)

走另一条路有点棘手。

如果您已经用 C 创建了一个套接字,并且想要在 Python 中使用它,则需要系列、类型和原型(prototype)值以及 fd 编号,但如果您有它们,fromfd就是答案。

但是,如果您在Python中创建一个套接字,将其文件描述符发送到C,然后将其取回,您就不想创建一个新的套接字对象;你想找到旧的。对于这种情况,您可能会考虑创建一个将 fd 编号映射到 socket 对象的 dict

最后,请小心,不要因为对一段代码执行奇怪的操作而与另一段代码混淆。如果您已将下一条协议(protocol)消息的一半读入 C 语言的缓冲区中,Python 将需要该半条消息。如果您在 Python 中将套接字设置为非阻塞模式,那么它在 C 中仍然是非阻塞的。依此类推。

关于python - 使用 python3 和 c/c++ 嵌入套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15377375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com