Closed
Description
我按照https://github.com/shadowsocks/shadowsocks/wiki/Configure-Multiple-Users 中的方法配置了双用户(即双端口)。同时将Limit_Clients下的socket.py文件,放到了/usr/local/bin/目录下。服务器上我只跑了ss,没有其他服务,/usr/local/bin/目录下只有pip和ss的可执行文件。
同时,我将两个端口中一个设置到白名单中,一个添加到黑名单中,如下:
white_list = [1017]
black_list={1018:40}
此时1017端口可以正常使用,但是通过1018则一直无法连接外网,查看ss的日志,发现输出了
[Errno 22] Invalid argument
我测试将1018同样添加到白名单中,则二者都可以使用。
请问以上现象是什么原因呢?
Activity
huangy10 commentedon Jan 8, 2018
排查了源代码,报错位置,在Limit_Clients/sockets.py文件中第123行,故将
set_close_timeout
设置为False来暂时回避这个问题。但是继而发现了另一诡异的问题。在第221行处,
self.getpeername()
返回的是一个长度为4的turple,前两个是地址和端口,而最后两个是0。这与文档有出入。我这里的python的版本是2.7.12。暂时将这里修改了解决了这个问题
==== Update
发现了开始说的Invalid argument的问题。在
setsockopt
设置时,数据打包的格式设置成II
在不同系统环境下的表现可能不稳定,替换成LL
后解决了这个问题。falseen commentedon Jan 9, 2018
厉害厉害!!原来是这个原因。我之前也发现了这个问题,但没想明白是怎么回事。
huangy10 commentedon Jan 10, 2018
@falseen 我创建了一个PR,改动很简单,你抽时间看看?
falseen commentedon Jan 10, 2018
@huangy10 好!目前还有一个问题,我想不到原因。不知你能否找到 ?
#2