OpenSSL库允许使用SSL_read从底层套接字读取并使用SSL_write写入它.这些函数可能会返回SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE,具体取决于它们的ssl协议需求(例如,重新协商连接时).
我真的不明白API要求我对这些结果做些什么.
对接受客户端连接的服务器应用程序进行映像,设置新的ssl会话,使底层套接字无阻塞,然后将filedescriptor添加到select/poll/epoll循环.
如果客户端发送数据,主循环将把它发送到ssl_read.如果返回SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE,必须在此处执行什么操作?WANT_READ可能很简单,因为下一个主循环迭代可能只会导致另一个ssl_read.但是如果ssl_read返回WANT_WRITE,应该调用哪些参数?为什么图书馆不发出呼叫呢?
如果服务器想要向客户端发送一些数据,它将使用ssl_write.同样,如果返回WANT_READ或WANT_WRITE,该怎么办?可以通过重复刚刚调用的同一个调用来回答WANT_WRITE吗?如果返回WANT_READ,是否应该返回主循环并让select/poll/epoll处理这个问题?但是首先应该写的信息呢?
或者应该在写入失败后立即完成读取?那么,当真正的解析器位于主循环中时,什么可以防止从应用程序协议中读取字节,然后在应用程序的郊区某处处理它?
clang用于静态分析器的扫描构建驱动程序生成了漂亮的html报告.但这些只包含分析仪发现的问题.
有没有办法从编译器本身生成相同类型的警告(和错误)报告?
我想通过reST生成文档,但不想手动编写reST源代码,而是让python脚本执行该操作,然后使用sphinx生成其他格式(HTML,PDF).
想象一下,我有一个二进制格式的电话簿.现在我使用python脚本来解析它并生成一个包含所有名称和数字的文档:
phone_book = PhonebookParser("somefile.bin")
restdoc = restProducer.NewDocument()
for entry in phone_book:
restdoc.add_section( title = entry.name, body = entry.number )
restdoc.write_to_file("phonebook.rst")
Run Code Online (Sandbox Code Playgroud)
然后我会继续调用sphinx来生成pdf和html:
> sphinx phonebook.rst -o phonebook.pdf
> sphinx phonebook.rst -o phonebook.html
Run Code Online (Sandbox Code Playgroud)
是否有一个python模块(在上面的例子中也称为restProducer)提供了一个用于生成reST的API?或者是通过几个打印语句转储reST标记的最佳方法?
python restructuredtext documentation-generation python-sphinx
将文件添加到zipfile时是否可以为文件强加特定时间戳?
遵循以下原则:
with ZipFile('spam.zip', 'w') as myzip:
myzip.write('eggs.txt', date_time=(1752, 9, 9, 15, 0, 0))
Run Code Online (Sandbox Code Playgroud)
我可以在zip文件的成员上更改ZipInfo吗?
使用python struct module时可以指定一个格式字符串,声明如何解释二进制数据:
>>> from struct import *
>>> fmt = 'hhl'
>>> values = [1,2,3]
>>> blob = pack(fmt, values)
Run Code Online (Sandbox Code Playgroud)
可以很容易地计算存储该格式实例所需的字节数:
>>> calcsize(fmt)
Run Code Online (Sandbox Code Playgroud)
检索变量数量的最佳方法是什么?需要"填充"格式?基本上,这将预先告诉上面示例中执行pack()的'values'数组应该有多大.
>>> calcentries(fmt)
3
Run Code Online (Sandbox Code Playgroud)
有这样的事吗?