小编dan*_*tje的帖子

如何在非阻塞套接字上处理OpenSSL SSL_ERROR_WANT_READ/WANT_WRITE

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处理这个问题?但是首先应该写的信息呢?

或者应该在写入失败后立即完成读取?那么,当真正的解析器位于主循环中时,什么可以防止从应用程序协议中读取字节,然后在应用程序的郊区某处处理它?

sockets linux openssl

37
推荐指数
3
解决办法
3万
查看次数

clang scan-build报告与编译器警告?

clang用于静态分析器的扫描构建驱动程序生成了漂亮的html报告.但这些只包含分析仪发现的问题.

有没有办法从编译器本身生成相同类型的警告(和错误)报告?

report clang compiler-warnings clang-static-analyzer

9
推荐指数
1
解决办法
935
查看次数

如何从python生成reST/sphinx源代码?

我想通过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

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

强制为pythons zipfile中的文件指定特定的时间戳

将文件添加到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 zipfile

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

确定python struct/pack fmt字符串中的元素数量?

使用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)

有这样的事吗?

python struct binary-data

5
推荐指数
1
解决办法
784
查看次数