相关疑难解决方法(0)

IO完成端口密钥混乱

我正在使用ctypes模块在Python中使用Windows DLL API 编写基于IO完成端口的服务器(此处为源代码).但这是API的直接用法,这个问题针对的是那些了解IOCP而不是Python的人.

据我了解CreateIoCompletionPort的文档,当您使用文件句柄(在我的情况下是套接字)调用此函数时,您指定了"用户定义的"完成键,您正在与创建的IOCP关联.当您调用GetQueuedCompletionStatus时,您将获得一个完成键值以及指向重叠对象的指针.完成键应标识重叠的对象和请求已完成的内容.

但是,假设我在带有重叠对象的CreateIoCompletionPort调用中传入100作为完成键.当相同的重叠对象完成其IO并且它通过GetQueuedCompletionStatus返回时,伴随它的完成键要大得多,并且与原始值100没有相似之处.

我误解了完成键是如何工作的,或者我在上面链接的源代码中是否做错了?

python windows ctypes winsock iocp

6
推荐指数
1
解决办法
2546
查看次数

python非块读取文件

我想读取非块模式的文件.所以我在下面做了

import fcntl
import os

fd = open("./filename", "r")
flag = fcntl.fcntl(fd.fileno(), fcntl.F_GETFD)
fcntl.fcntl(fd, fcntl.F_SETFD, flag | os.O_NONBLOCK)
flag = fcntl.fcntl(fd, fcntl.F_GETFD)
if flag & os.O_NONBLOCK:
    print "O_NONBLOCK!!"
Run Code Online (Sandbox Code Playgroud)

但价值flag仍然代表0.为什么......?我想我应该根据改变os.O_NONBLOCK

当然,如果我调用fd.read(),它会在read()处被阻塞.

python nonblocking python-2.7

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

ctypes ×1

iocp ×1

nonblocking ×1

python-2.7 ×1

windows ×1

winsock ×1