sockaddr和sockaddr_storage有什么区别?我不明白,因为查看代码看起来非常相似:
struct sockaddr {
uint8_t sa_len;
sa_family_t sa_family;
char sa_data[14];
}
struct sockaddr_storage {
uint8_t ss_len;
sa_family_t ss_family;
char ss_padding[SIZE];
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读以下关于“so_reuseaddr 到底做什么?”的答案。
此套接字选项告诉内核,即使此端口正忙(处于 TIME_WAIT 状态),仍要继续并重用它。如果它很忙,但处于其他状态,您仍然会收到地址已在使用中的错误。如果您的服务器已关闭,然后立即重新启动,而其端口上的套接字仍处于活动状态,则此功能非常有用。您应该意识到,如果出现任何意外数据,可能会使您的服务器感到困惑,但虽然这是可能的,但可能性不大。
有人指出,'一个套接字是一个5元组(proto、本地地址、本地端口、远程地址、远程端口)。SO_REUSEADDR 只是表示您可以重用本地地址。5 元组仍然必须是唯一的!作者:迈克尔·亨特 (mphunter@qnx.com)。这是事实,这就是为什么您的服务器不太可能看到意外数据的原因。危险在于这样的 5 元组仍然在网络上浮动,并且当它四处浮动时,来自同一系统上同一客户端的新连接碰巧获得相同的远程端口。Richard Stevens 在#2.7“请解释 TIME_WAIT 状态”中解释了这一点。
我只是无法得到最后几行The danger is....TIME_WAIT state.它说如果网上仍然有相同的浮动元组那么......但是如果 1 小时后还有相同的元组怎么办?我不明白,有人能解释一下吗?
如果我做这样的事情:
class ActiveRecord::Base
def self.encrypt(*attr_names)
encrypter = Encrypter.new(attr_names)
before_save encrypter
after_save encrypter
after_find encrypter
define_method(:after_find) { }
end
end
Run Code Online (Sandbox Code Playgroud)
require某个地方打电话吗?require?我试图找出-t和-tt选项的作用.
来自doc:
当源文件混合制表符和空格以进行缩进时,发出警告,使其依赖于以空格表示的制表符的价值.选项被给出两次(-tt)时发出错误.
我没有得到它,特别是粗体句,这是什么意思?标签是一个标签('\ t'),空格是一个空格(''),在ascii表中它们也有2个不同的代码.
我会举一个例子来更好地解释自己.我代码:
if True:
print('hello') # here a tab that my editor represents with 4 spaces
print('world') # here just used 4 spaces
Run Code Online (Sandbox Code Playgroud)
现在这个代码,我尝试过,在Python3和Python2中都不起作用,那么-t做什么呢?
你能给我一个澄清吗?
阅读文档我注意到内置函数len不支持所有迭代,只支持序列和映射(和集合).在阅读之前,我一直认为该len函数使用迭代协议来评估对象的长度,所以我真的很惊讶地阅读它.
我阅读已经发布的问题(这里和这里),但我仍然感到困惑,我仍然没有得到真正的原因,为什么不允许len一般的所有迭代.
这是一个比实施原因更具概念/逻辑性的原因吗?我的意思是当我问一个对象的长度时,我要求一个属性(它有多少个元素),一个对象作为生成器没有的属性,因为它们没有内部元素,即产生元素.
此外,生成器对象可以产生无限长度,导致未定义的长度,这是其他对象不能发生的事情,例如列表,元组,dicts等等......
我是对的,还是有更多的见解/更多我不考虑的事情?
我有以下脚本:
一个.py
print(__builtins__.max)
import b
Run Code Online (Sandbox Code Playgroud)
以及以下模块:
b.py
print(__builtins__.max)
Run Code Online (Sandbox Code Playgroud)
启动它们python3 a.py我得到:
<built-in function max>
Traceback (most recent call last):
File "a.py", line 2, in <module>
import b
File "/home/antonio/Scrivania/b.py", line 1, in <module>
print(__builtins__.max)
AttributeError: 'dict' object has no attribute 'max'
Run Code Online (Sandbox Code Playgroud)
所以我不明白。为什么在脚本__builtins__中分配给内置模块而不是在模块__builtins__中分配给字典?
我正在阅读JavaBean规范,但我找不到一个句子,它明确指出bean必须有一个默认的构造函数.是这样或不是吗?
根据 PHP 文档:
header()必须在发送任何实际输出之前调用,无论是通过普通的 HTML 标记、文件中的空行还是来自 PHP。使用 include 或 require 函数或其他文件访问函数读取代码,并且在调用 header() 之前输出空格或空行,这是一个非常常见的错误。使用单个 PHP/HTML 文件时存在同样的问题。
但是当我尝试文档报告的示例时(稍作改动):
<html>
<?php
/* This will give an error. Note the output
* above, which is before the header() call */
header('X-Header: http://www.example.com/');
exit;
?>
Run Code Online (Sandbox Code Playgroud)
一切正常,没有出现错误,我顺利地<html>在输出和X-Header标题中找到了我的标签。
我使用的是 PHP 7.1.9,所以文档所说的仍然正确吗?
在JS中,我们有以下情况:
<< 运营商:
3 << 1 // 6
5 << 1 // 10
7 << 1 // 14
-3 << 1 // -6
-5 << 1 // -10
-7 << 1 // -14
Run Code Online (Sandbox Code Playgroud)
>> 运营商:
3 >> 1 // 1
5 >> 1 // 2
7 >> 1 // 3
-3 >> 1 // -2
-5 >> 1 // -3
-7 >> 1 // -4
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,对于<<运营商而言,对于小于2**32的值,我们有abs(X << Y) === abs(-X << Y).
为什么这不适用于>>运营商?
python ×4
python-3.x ×3
sockets ×2
activerecord ×1
bind ×1
c ×1
indentation ×1
java ×1
javabeans ×1
javascript ×1
php ×1
python-2.7 ×1
tabs ×1
tcp ×1