Giter VIP home page Giter VIP logo

goquiet's Introduction

Go Report Card

简体中文

GoQuiet

A Shadowsocks plugin that obfuscates the traffic as normal HTTPS traffic to non-blocked websites through domain fronting and disguises the proxy server as a normal webserver.

This software has been proven stable but it's not frequently maintained. Please check out the upgrade to this project Cloak, which provides 10% to 50% faster web page loading with multi-user support

The fundamental idea of obfuscating shadowsocks traffic as TLS traffic is not original. simple-obfs and ShadowsocksR's tls1.2_ticket_auth mode have shown this to be effective. This plugin has made improvements so that the goal of this plugin is to make indiscriminate blocking of HTTPS servers (or even IP ranges) with high traffic the only effective way of stopping people from using shadowsocks.

Beyond the benefit of bypassing the firewall, it can also cheat traffic restrictions imposed by ISP. See here.

This plugin has been tested on amd64 and arm Linux and amd64 Windows. It uses about the same CPU and memory as shadowsocks-libev (which is very little), and has almost no transmission overhead added on top of shadowsocks.

Download

Download the binaries here

or if you are deploying it on a server, you can use the automated script here.

Build

gq-client requires go1.11+. gq-server doesn't require any particularly new version of go.

make client or make server

or use the automated script here to build shadowsocks-libev and GoQuiet server from source.

Usage

Change the key in config file before using it. It can be the same as shadowsocks' password

You can check Instructions for Windows users

Plugin mode

For server:

ss-server -c <path-to-ss-config> --plugin <path-to-gq-server-binary> --plugin-opts "<path-to-gqserver.json>"

For client:

ss-local -c <path-to-ss-config> --plugin <path-to-gq-client-binary> --plugin-opts "<path-to-gqclient.json>"

or as value of plugin and plugin_opts in Shadowsocks JSON

{
    "server":"0.0.0.0",
    "server_port":443,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"mypassword",
    "timeout":300,
    "method":"aes-128-gcm",
    "fast_open":false,
    "reuse_port":true,
    "no_delay":true,
    "plugin":"path-to-gqserver/client-binary",
    "plugin_opts":"path-to-gqserver/client.json"
}

Alternatively, plugin_opts can be the configuration options separated by semi-colons. For example:

"plugin_opts":"WebServerAddr=204.79.197.200:443;Key=exampleconftest"

Keys cannot have = " ; in them

Standalone mode

Standalone mode should only be used if your shadowsocks port does not support plugins

For server:

gq-server -r 127.0.0.1:8388 -c <path-to-gqserver.json>
ss-server -c <path-to-ss-config> -s 127.0.0.1 -p 8388

For client:

gq-client -s <server_ip> -l 1984 -c <path-to-gqclient.json>
ss-local -c <path-to-ss-config> -s 127.0.0.1 -p 1984 -l 1080

Configuration

For server:

WebServerAddr is the redirection address and port when the incoming traffic is not from shadowsocks. It should correspond to the IP record of the ServerName set in gqclient.json

Key is the key. This needs to be the same as the Key set in gqclient.json

For client:

ServerName is the domain you want to make the GFW think you are visiting

Key is the key

TicketTimeHint is the time needed for a session ticket to expire and a new one to be generated. Leave it as the default.

Browser is the browser you want to make the GFW think you are using, it has NOTHING to do with the web browser or any web application you are using on your machine. Currently, chrome and firefox are supported.

How it works

As mentioned above, this plugin obfuscates shadowsocks' traffic as TLS traffic. This includes adding TLS Record Layer header to application data and simulating TLS handshake. Both of these are trivial to implement, but by manipulating data trasmitted in the handshake sequence, we can achieve some interesting things.

A TLS handshake sequence is initiated by the client sending a ClientHello message. We are interested in the field random and extension:session_ticket. Accroding to rfc5246, the random field is the current 32bit unix time concated with 28 random bytes. However, in most implementations all the 32 bytes are randomly generated (source: Wireshark). The session_ticket extension triggers a mechanism called session resumption, which allows the server to skip a lot of steps, most notably the Certificate message sent by the server. If you don't have a valid TLS certificate, you'll have to compose an invalid cert, which is a strong feature indicating that the server is a proxy. With the session_ticket's presence, we don't need to give out this information.

The client side of this plugin composes the ClientHello message using this procedure:

# Global variables
#   In config file:
preshared_key = '[A key shared out-of-band]'
ticket_time_hint = 3600 # In TLS implementations this is the time in seconds for a session ticket to expire. 
                        # Common values are 300,3600,7200 and 100800

#   Calculated on startup:
aes_key = sha256(preshared_key)
opaque = rand32int()

# Random:
iv = randbytes(16)
goal = sha256(str(floor(gettimestamp()/(12*60*60))) + preshared_key)
rest = aes_encrypt(iv,aes_key,goal[0:16])
random = iv + rest

# Session ticket
ticket = randbytes(192,seed=opaque+aes_key+floor(gettimestamp()/ticket_time_hint)))

Once the server receives the ClientHello message, it checks the random field. If it doesn't pass, the entire ClientHello is sent to the web server address set in the config file and the server then acts as a relay between the client and the web server. If it passes, the server then composes and sends ServerHello, ChangeCipherSpec, Finished together, and then client sends ChangeCipherSpec, Finished together. There are no useful informations in these messages. Then the server acts as a relay between the client and the shadowsocks server.

Replay prevention

The gettimestamp()/(12*60*60) part is there to prevent replay:

The random field should be unique in each ClientHello. To check its uniqueness, the server caches the value of the random field. Obviously we cannot cache every random forever, we need to regularly clean the cache. If we set the cache expiration time to, say 12 hours, replay attemps within 12 hours will fail, but if the firewall saves the ClientHello and resend it 12 hours later, that message will pass the check on the server and our proxy is exposed. However, when gettimestamp()/(12*60*60) is in place, the replayed message will never pass the check because for replays within 12 hours, they fail to the cache; for replays after 12 hours, they fail to the uniqueness of the value of gettimestamp()/(12*60*60) for every 12 hours.

Notes on the web server

If you want to run a functional web server on your proxy machine, you need it to have a domain and a valid certificate. As for the domain, you can either register one at some cost, or use a DDNS service like noip for free. The certificate can be obtained from Let's Encrypt for free. The certificate is for your web server (e.g. Apache and Nginx) only. The GoQuiet plugin does not need a certificate.

https://dcamero.azurewebsites.net/shadowsocks-goquiet.html - Detailed guide about "How to make your traffic look like simple tls traffic"

Or you can set the WebServerAddr field in the server config file as an external IP, and set the ServerName field in the client config file as the domain name of that ip. Because of the Server Name Indication extension in the ClientHello message, the firewall knows the domain name someone is trying to access. If the firewall sends a ClientHello message to our proxy server with an SNI we used, the destination IP specified in WebServerAddr will receive this ClientHello message and the web server on that machine will check the SNI entry against its configuration. If they don't match, the web server will refuse to connect and show an error message, which could expose the fact that our proxy machine is not running a normal TLS web server. If you match the external IP with its domain name (e.g. 204.79.197.200 to www.bing.com), our proxy server will become, effectively to the observer, a server owned by that domain.

Support me

If you find this project useful, donations are greatly appreciated!

Donate

BTC: bc1q59yvpnh0356qq9vf0j2y7hx36t9ysap30spx9h

ETH: 0x8effF29a8F9bD38A367580527AC303972c92b60c

goquiet's People

Contributors

cbeuw avatar kimw avatar linusyang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

goquiet's Issues

plugin service exit unexpectedly

SS-libev version: 3.1.3
GQ server version: 1.1.2
TFO: false

I have added some additional commands to install GoQuiet with teddysun's autoinstall script but finally I don't understand why the GQ plugin is not working. Maybe I am doing something wrong.
Can somebody help on this matter, please?
Script: https://github.com/hybtoy/shadowsocks_install/blob/master/shadowsocks-libev-debian.sh

SSL config:
{
"server":${server_value},
"server_port":${shadowsocksport},
"local_address":"127.0.0.1",
"local_port":1080,
"method":"${shadowsockscipher}",
"password":"${password}",
"timeout":600,
"udp_timeout":600,
"mode":"tcp_and_udp",
"fast_open":false,
"no_delay":true,
"reuse_port":true,
"verbose":true,
"plugin":"/etc/shadowsocks-libev/gqserver",
"plugin_opts":"/etc/shadowsocks-libev/gqserver.json"
}

GQ server config:

{
"WebServerAddr":"${obfshost}:443",
"Key":"${password}",
"FastOpen":false,
}

Log:
`shadowsocks.service - LSB: Fast tunnel proxy that helps you bypass firewalls
Loaded: loaded (/etc/init.d/shadowsocks; bad; vendor preset: enabled)
Active: active (running) since Wed 2018-04-04 07:20:35 CEST; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 849 ExecStop=/etc/init.d/shadowsocks stop (code=exited, status=0/SUCCESS)
Process: 853 ExecStart=/etc/init.d/shadowsocks start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/shadowsocks.service
-699 /etc/shadowsocks-libev/gqserver

Apr 04 07:20:35 mail2you /usr/local/bin/ss-server[855]: plugin "/etc/shadowsocks-libev/gqserver" enabled
Apr 04 07:20:35 mail2you /usr/local/bin/ss-server[855]: UDP relay enabled
Apr 04 07:20:35 mail2you /usr/local/bin/ss-server[855]: enable TCP no-delay
Apr 04 07:20:35 mail2you /usr/local/bin/ss-server[855]: initializing ciphers... aes-128-gcm
Apr 04 07:20:35 mail2you /usr/local/bin/ss-server[855]: tcp server listening at 127.0.0.1:57593
Apr 04 07:20:35 mail2you /usr/local/bin/ss-server[855]: tcp port reuse enabled
Apr 04 07:20:35 mail2you /usr/local/bin/ss-server[855]: udp server listening at 0.0.0.0:443
Apr 04 07:20:35 mail2you /usr/local/bin/ss-server[855]: udp port reuse enabled
Apr 04 07:20:35 mail2you /usr/local/bin/ss-server[855]: running from root user
Apr 04 07:20:35 mail2you /usr/local/bin/ss-server[855]: plugin service exit unexpectedly
`

[gq-server] High CPU occupancy

CPU will be exhausted on HTTP/1.1 & HTTP/2. (HTTP/1.0 is OK)

  • Step 1 - Use the following command on server side,

    gq-server -r 127.0.0.1:8388 -c gqserver.json
  • Step 2 - Try curl command as,

    curl --http1.1 https://127.0.0.1:8388 -vk
    # or
    curl --http2 https://127.0.0.1:8388 -vk

CPU exhausted :(

Error building with shadowsocks-gq-build.sh

cmd/gq-server/gq-server.go:13:2: cannot find package "github.com/cbeuw/GoQuiet/gqserver" in any of:
/usr/lib/go-1.6/src/github.com/cbeuw/GoQuiet/gqserver (from $GOROOT)
($GOPATH not set)
Makefile:13: recipe for target 'server' failed
make: *** [server] Error 1
mv build/gq-* /usr/local/bin
mv: cannot stat 'build/gq-*': No such file or directory
Makefile:16: recipe for target 'install' failed
make: *** [install] Error 1
[Error] GoQuiet for shadowsocks-libev install failed.

Better obuscation

Normally, an HTTPS server will only establish one TCP connection and handshake once with the client. In our case, one app-to-ss-local TCP connection corresponds to one ss-local-to-gq-client connection. gq-client projects each connection to one connection (and does one handshake) to gq-server. For example, when you are browsing a blocked website and the webpage needs to load external resources (which is almost all the cases), your browser will attempt to establish multiple connections to these resource sites, eventually causing gq-client to establish multiple TCP connections and perform multiple handshakes with gq-server - not a normal behavior, and it gives extra overhead.

The solution is multiplexing: squash all data streams into one TCP connection, and then demuxer the stream and dispatch the data to individual connections to Shadowsocks. This is easy and there are wheels readily available. However, the identification of which pack of data belongs to which connection pair relies on a streamID that's unique to each pair of connections. The streamID has to be included in the transmission, which, if sent in plaintext, will be significant to the GFW.

To solve this, we can use the approach used by our random field in ClientHello, whereby the streamID is encrypted by a block cipher and sent together with a random IV. However, this needs a mutual secret (for the AES key), which is not an issue in our case, but more importantly, this operation is quite expensive as one which needs to be done all the time. We would like a generic and elegant solution.

So what do we want? We want the streamID to appear differently in each transmission, i.e. the demuxer needs to be able to project many different values to one unique value. Mathematically speaking, the demuxer is using a many to one function, and it has to be invertible under a certain domain because the muxer needs to project one streamID to one of the many value. Periodic functions satisfy these conditions.

Consider

where streamID <= 1000000. And

where k is a random positive integer, so that there is no pattern in mux(x), so we send this with the data. And we have





Precision will be an issue since we are converting between discrete integers and continuous floats. This can be mitigated by keeping the value of k small and using double precision floats.

I will play around with this idea some time later.

gq-client 1.1.1+ cannot work under macOS

Hi,

First of all. Thanks for the developing an useful obfuscating plugin. I've almost deployed the latest(some from 1.1.2, some from my own build) to all my devices, server, arm and mips32 router, x86 nas. All of them work perfectly.

The only issue I met is 1.1.1+ version could not work under the macOS. Please kindly take a look. Thanks!

shadowsocks-libev 3.2.0

macOS 10.13.6

my client config
{
"ServerName": "www.apple.com",
"Key": "********",
"TicketTimeHint": 3600,
"Browser": "chrome",
"FastOpen": true
}

my server config

{
"WebServerAddr":"23.203.245.14:443",
"Key":"********",
"FastOpen":false
}

1.0.2 version works correctly
./gq-client-mac64-1.0.2 -c ./goquiet.json -l 11111 -p 443 -s myserver.com
2018/08/17 11:18:09 Starting standalone mode. Listening for ss on 127.0.0.1:11111

1.1.1 version cannot work
./gq-client-mac64-1.1.1 -c ./goquiet.json -l 11111 -p 443 -s myserver.com
2018/08/17 11:16:54 Starting standalone mode. Listening for ss on 127.0.0.1:11111
2018/08/17 11:16:54 protocol not available

How to strengthen or improve the work of GoQuiet

I have a question, to the developer
Advise how to improve the performance of your GoQuiet plugin
How long should I put a password of 10 or 30 characters and how often do I need to change my password?

Because the Chinese GWF with its big eye watches and checks all traffic and I want to be sure that tomorrow I will have access to the Internet

UDP-heavy app performance issues? (not surprising, so more of a "feature suggestion" than a bug report)

Hello!
First, thanks for great work on this plugin.

My (not unexpected) problem is that it is hitting a UDP intensive piece of software I run over shadowsocks pretty heavily.

Based on its operation description and the fact that I get mostly same issues if I run said piece of software over OpenVPN in tcp mode I infer that it is due to UDP->TCP->etc.

Could the plugin be modified to use QUIC(like) obfuscation for UDP part of shadowsocks traffic as an option?

QUIC is essentially UDP, backed by google and thus should not compromise the "decoy website" aspect of this plugin too much (and if someone is concerned by that, well, make it optional)

There already is a quic-only plugin for shadowsocks https://github.com/shadowsocks/v2ray-plugin but it sadly lacks the great "pretend to be a website" functionality

High CPU occupancy

  • If there's no connection, gq-server doing well.
  • If there're some HTTP connections, gq-server doing well too.
  • If there're any shadowsocks transfer (after successful trans for 2-5 seconds), gq-server sucks all CPU resource. We can find a number of gq-server process.

As I known there're two kind of redirections,

  1. Web browser <==> gq-server <==> HTTPD server

    I name it as HTTP REDIR. It was fixed in #13.

  2. ss-local <==> gq-client <=> gq-server <=> ss-server

    I name it as SS REDIR. Maybe need some kind of fix?

gq-server 1.1.1+ IPv6 not working

ss+ipv6 works.
ss+goquiet+ipv6, client side using ipv4 works.
ss+goquiet+ipv6, client side using ipv6 doesn't work, log is empty.
ss+goquiet+ipv6, client side using ipv6 without goquite, logs show
2018/11/23 00:03:16 gq-server.go:132: +1 non SS non (or malformed) TLS traffic from [aaaa]:53174

ss+goquiet+ipv6 netstat

tcp        0      0 127.0.0.1:11277         0.0.0.0:*               LISTEN      4144/ss-server
tcp6       0      0 :::443                  :::*                    LISTEN      4145/gq-server

config file

{
        "server":"::0",
        "server_port":443,
        "password":"",
        "timeout":600,
        "method":"chacha20-ietf-poly1305",
        "fast_open":true,
        "reuse_port":true,
        "no_delay":true,
        "mode":"tcp_and_udp",
        "plugin":"gq-server",
        "plugin_opts":"WebServerAddr=204.79.197.200:443;Key=;FastOpen=true"
}

Compile mips32 with softfloat to run on routers without fpu

Hello,
The released mips32 doesn't work on MIPS 24kc processor (mips32r2) because it doesn't have FPU and requires compile with softfloat support. It gives invalid instruction error and crashes on router like GL inet ar300m.

Could you release such a binary ? Thanks in advance.

Error with building the code

I am trying to make client the code on my local machine. I cloned the repo and tried to run the command as mentioned in the README. But I got following errors, any idea how to have a clean build?

go build -o ./build/gq-client ./cmd/gq-client cmd/gq-client/gq-client.go:5:2: cannot find package "github.com/cbeuw/GoQuiet/gqclient" in any of: /usr/lib/go-1.6/src/github.com/cbeuw/GoQuiet/gqclient (from $GOROOT) /home/user/go/src/github.com/cbeuw/GoQuiet/gqclient (from $GOPATH) cmd/gq-client/gq-client.go:6:2: cannot find package "github.com/cbeuw/GoQuiet/gqclient/TLS" in any of: /usr/lib/go-1.6/src/github.com/cbeuw/GoQuiet/gqclient/TLS (from $GOROOT) /home/user/go/src/github.com/cbeuw/GoQuiet/gqclient/TLS (from $GOPATH) Makefile:4: recipe for target 'client' failed make: *** [client] Error 1

Want to contribute some codes, is this project still active?

Hello, thanks for developing the GoQuiet plugin. Recently I found some bugs while GoQuiet is run as a plugin on linux servers. I notice that there have been quite a long time since last commit. So is Goquiet project still active or I should directly change to Cloak instead?

panic: runtime error: integer divide by zero

Hi:
I run server like this
ss-server -s 0.0.0.0 -p 6667 -k*** -m aes-256-cfb --plugin /opt/gq/gq-server --plugin-opts /opt/gq/gq-server.json

run client like this:
ss-local -s 172.105.198.92 -k*** -m aes-256-cfb -l 1089 -p 6667 --plugin /opt/gq/gq-client --plugin-opts "/opt/gq/gq.json"

run client and it echo

 2018-03-22 21:56:17 INFO: plugin "/opt/gq/gq-client" enabled
 2018-03-22 21:56:17 INFO: initializing ciphers... aes-256-cfb
 2018-03-22 21:56:17 INFO: listening at 127.0.0.1:1089

when I use SwitchyOmega connect the local port 1089, the ss-client exit and echo

panic: runtime error: integer divide by zero

goroutine 5 [running]:
github.com/cbeuw/GoQuiet/gqclient/TLS.makeSessionTicket(0xc4200820a0, 0x0, 0x0, 0x2)
	/home/andy/go/src/github.com/cbeuw/GoQuiet/gqclient/TLS/TLS.go:77 +0x12d
github.com/cbeuw/GoQuiet/gqclient/TLS.(*chrome).composeExtensions(0xc420044e58, 0xc4200820a0, 0xc4200123e0, 0x1c, 0x1c)
	/home/andy/go/src/github.com/cbeuw/GoQuiet/gqclient/TLS/chrome.go:38 +0x673
github.com/cbeuw/GoQuiet/gqclient/TLS.(*chrome).composeClientHello(0xc420044e58, 0xc4200820a0, 0x3, 0xc420012300, 0x13)
	/home/andy/go/src/github.com/cbeuw/GoQuiet/gqclient/TLS/chrome.go:71 +0x33f
github.com/cbeuw/GoQuiet/gqclient/TLS.ComposeInitHandshake(0xc4200820a0, 0x3, 0xc420012300, 0x13)
	/home/andy/go/src/github.com/cbeuw/GoQuiet/gqclient/TLS/TLS.go:103 +0x324
main.initSequence(0x121cc40, 0xc42000c050, 0xc4200820a0)
	/home/andy/GoQuiet/cmd/gq-client/gq-client.go:91 +0x1ed
created by main.main
	/home/andy/GoQuiet/cmd/gq-client/gq-client.go:184 +0x53f
 2018-03-22 21:58:55 ERROR: plugin service exit unexpectedly```

Client crash when server setting are changed

I changed the server setting for gq-server: FastOpen, but then the client crashed.
When the internet connection temporarily goes off, it also crashes.

Proposition: The client should be more stable, and should not be affected by server side's change.

請問插件可以支持同時監聽ipv4和ipv6地址嗎?

我在大約半個小時前更新了shadowsocks的源代碼並完成了編譯,通過命令

/usr/local/bin/ss-server -a icnss -c /etc/shadowsocks-libev/config.json -u --fast-open -6 --reuse-port -d 2620:0:ccc::2 --plugin /usr/local/bin/gq-server --plugin-opts "/etc/GoQuiet/gqserver.json"

啓動了shadowsocks和插件,然後觀察到了如下的錯誤提示:

 2018-03-21 21:54:34 INFO: resolving hostname to IPv6 address first
 2018-03-21 21:54:34 INFO: using tcp fast open
 2018-03-21 21:54:34 INFO: plugin "/usr/local/bin/gq-server" enabled
 2018-03-21 21:54:34 INFO: UDP relay enabled
 2018-03-21 21:54:34 INFO: initializing ciphers... chacha20-ietf-poly1305
 2018-03-21 21:54:34 INFO: using nameserver: 2620:0:ccc::2
 2018-03-21 21:54:34 INFO: tcp server listening at 127.0.0.1:*****
 2018-03-21 21:54:34 INFO: tcp port reuse enabled
 2018-03-21 21:54:34 INFO: udp server listening at [::0]:****
 2018-03-21 21:54:34 INFO: udp port reuse enabled
 2018-03-21 21:54:34 INFO: udp server listening at 0.0.0.0:****
 2018-03-21 21:54:34 INFO: udp port reuse enabled
2018/03/21 21:54:34 Listening on ::0|0.0.0.0:****
2018/03/21 21:54:34 listen tcp: address ::0|0.0.0.0:****: too many colons in address
 2018-03-21 21:54:34 ERROR: plugin service exit unexpectedly

感覺不需要提供服務器端的gq-server.json內容了,就不放了。期待能得到解答,謝謝!

GoQuiet server crash

客户端通过shadowsocks代理访问YouTube等网站时,再在浏览器(Chrome 65 64位)中通过客户端代理访问gqclient.json中预设的ServerName中的网站,会导致server端的goquiet自动退出。该bug在我这里可以稳定的重现。以下是log:

2018/04/02 21:54:18 Starting standalone mode, listening on 0.0.0.0:443 to ss at 127.0.0.1:1080
2018/04/02 21:54:18 Listening on 0.0.0.0:443
2018/04/02 21:54:51 +1 non SS traffic from ...:54996
2018/04/02 21:54:52 +1 non SS traffic from ...:55001
2018/04/02 21:54:54 +1 non SS traffic from ...:55011
2018/04/02 21:54:55 +1 non SS traffic from ...:55012
2018/04/02 21:55:04 +1 non SS traffic from ...:52774
2018/04/02 21:55:05 +1 non SS traffic from ...:52814
2018/04/02 21:55:21 +1 non SS traffic from ...:55152
2018/04/02 21:55:22 +1 non SS traffic from ...:55154
runtime/cgo: pthread_create failed: Resource temporarily unavailable
SIGABRT: abort
PC=0x7f6e6ee455f7 m=28 sigcode=18446744073709551610

goroutine 0 [idle]:

goroutine 6 [syscall]:
runtime.notetsleepg(0x623140, 0x273a1269bb22, 0x1)
/usr/lib/go-1.9/src/runtime/lock_futex.go:227 +0x42 fp=0xc420022760 sp=0xc420022730 pc=0x410c12
runtime.timerproc()
/usr/lib/go-1.9/src/runtime/time.go:216 +0x305 fp=0xc4200227e0 sp=0xc420022760 pc=0x449915
runtime.goexit()
/usr/lib/go-1.9/src/runtime/asm_amd64.s:2337 +0x1 fp=0xc4200227e8 sp=0xc4200227e0 pc=0x458581
created by runtime.addtimerLocked
/usr/lib/go-1.9/src/runtime/time.go:122 +0xed

goroutine 1 [syscall]:
syscall.Syscall6(0x120, 0x3, 0xc420045a70, 0xc420045a64, 0x80800, 0x0, 0x0, 0x5473e0, 0xc420061ec0, 0x0)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:44 +0x5
syscall.accept4(0x3, 0xc420045a70, 0xc420045a64, 0x80800, 0x0, 0x20, 0xc420061ee0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:1553 +0x88
syscall.Accept4(0x3, 0x80800, 0x0, 0x0, 0x0, 0xc420045b70, 0x483bed)
/usr/lib/go-1.9/src/syscall/syscall_linux.go:452 +0x88
internal/poll.accept(0x3, 0x569100, 0x0, 0x0, 0x5691d0, 0xc420045bf0, 0x18, 0xc420045be0)
/usr/lib/go-1.9/src/internal/poll/sock_cloexec.go:17 +0x3f
internal/poll.(*FD).Accept(0xc42007a080, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:328 +0xfe
net.(*netFD).accept(0xc42007a080, 0xc42000e2b8, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:238 +0x42
net.(*TCPListener).accept(0xc42000e050, 0x5124de, 0x455070, 0xc420045d40)
/usr/lib/go-1.9/src/net/tcpsock_posix.go:136 +0x2e
net.(*TCPListener).Accept(0xc42000e050, 0x569220, 0x60cb80, 0xc42000e2b8, 0xc420080000)
/usr/lib/go-1.9/src/net/tcpsock.go:247 +0x49
main.main.func1(0x5609bd, 0x7, 0x7ffe8681cf43, 0x3)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:249 +0x249
main.main()
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:268 +0x52a

goroutine 5 [sleep]:
time.Sleep(0x274a48a78000)
/usr/lib/go-1.9/src/runtime/time.go:65 +0x130
main.usedRandomCleaner(0xc420080000)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:188 +0xe6
created by main.main
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:240 +0x3d9

goroutine 18 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f565af0, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007a418, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007a418, 0xc420012a00, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007a400, 0xc420012ad0, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007a400, 0xc420012ad0, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x50)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e088, 0xc420012ad0, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e088, 0xc420012ad0, 0x5, 0x5, 0x5, 0x557d40, 0xc42001df00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e088, 0xc420012ad0, 0x5, 0x5, 0x5, 0x5, 0x60)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e088, 0x50, 0x5b, 0x50, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000c260)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 8 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f565eb0, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007a118, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007a118, 0xc42029ad00, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007a100, 0xc42029ad58, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007a100, 0xc42029ad58, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x50)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e060, 0xc42029ad58, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e060, 0xc42029ad58, 0x5, 0x5, 0x5, 0x557d40, 0xc420022f00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e060, 0xc42029ad58, 0x5, 0x5, 0x5, 0x5, 0x60)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e060, 0x50, 0x5b, 0x50, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000c180)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 9 [syscall]:
syscall.Syscall(0x0, 0x8, 0xc42009a000, 0x2800, 0xc420001b00, 0xc420023578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x8, 0xc42009a000, 0x2800, 0x2800, 0xc420023500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x8, 0xc42009a000, 0x2800, 0x2800, 0xc42007a100, 0xc420001b00, 0xc420023600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007a180, 0xc42009a000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007a180, 0xc42009a000, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e068, 0xc42009a000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e068, 0xc42009a000, 0x2800, 0x2800, 0x1, 0x0, 0xa0, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c180)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 69 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f5651f0, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007b018, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007b018, 0xc420013f00, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007b000, 0xc420013f05, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007b000, 0xc420013f05, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x2ec)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e128, 0xc420013f05, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e128, 0xc420013f05, 0x5, 0x5, 0x5, 0x557d40, 0xc42018ff00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e128, 0xc420013f05, 0x5, 0x5, 0x5, 0x5, 0x300)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e128, 0x2ec, 0x2fb, 0x2ec, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000c520)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 12 [syscall]:
syscall.Syscall(0x0, 0xa, 0xc42009c800, 0x2800, 0xc4200ae480, 0xc42001c578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0xa, 0xc42009c800, 0x2800, 0x2800, 0xc42001c500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0xa, 0xc42009c800, 0x2800, 0x2800, 0xc42007a280, 0xc4200ae400, 0xc42001c600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007a300, 0xc42009c800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007a300, 0xc42009c800, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e078, 0xc42009c800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e078, 0xc42009c800, 0x2800, 0x2800, 0x1, 0x0, 0x70, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c1c0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 181 [runnable]:
syscall.Syscall(0x0, 0x33, 0xc4202e7800, 0x2800, 0xe30, 0x2800, 0x0)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x33, 0xc4202e7800, 0x2800, 0x2800, 0xc42018ad00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x33, 0xc4202e7800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc4202bcb00, 0xc4202e7800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc4202bcb00, 0xc4202e7800, 0x2800, 0x2800, 0x10200000000, 0x0, 0xc4202e7800)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e2c0, 0xc4202e7800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e2c0, 0xc4202e7800, 0x2800, 0x2800, 0x1, 0xc4200635e0, 0xc42018afb8, 0x4d9a79)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000caa0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 183 [runnable]:
syscall.Syscall(0x0, 0x34, 0xc420326000, 0x2800, 0xe31, 0x2800, 0x0)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x34, 0xc420326000, 0x2800, 0x2800, 0xc420188d00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x34, 0xc420326000, 0x2800, 0x2800, 0xc420036110, 0x4, 0x60a520)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc4202bcb80, 0xc420326000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc4202bcb80, 0xc420326000, 0x2800, 0x2800, 0x10200000000, 0x0, 0xc420326000)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e2c8, 0xc420326000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e2c8, 0xc420326000, 0x2800, 0x2800, 0x1, 0x0, 0xc4202f4000, 0xc420188fc8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000cae0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 16 [syscall]:
syscall.Syscall(0x0, 0xd, 0xc42009f000, 0x2800, 0xc4200aec00, 0xc42001cd78, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0xd, 0xc42009f000, 0x2800, 0x2800, 0xc42001cd00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0xd, 0xc42009f000, 0x2800, 0x2800, 0xc42007a380, 0xc4200aec00, 0xc42001ce00)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007a480, 0xc42009f000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007a480, 0xc42009f000, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e090, 0xc42009f000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e090, 0xc42009f000, 0x2800, 0x2800, 0x1, 0x0, 0x70, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c220)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 19 [syscall]:
syscall.Syscall(0x0, 0xe, 0xc4200a1800, 0x2800, 0xc4200af080, 0xc42001e578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0xe, 0xc4200a1800, 0x2800, 0x2800, 0xc42001e500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0xe, 0xc4200a1800, 0x2800, 0x2800, 0xc42007a400, 0xc4200af000, 0xc42001e600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007a500, 0xc4200a1800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007a500, 0xc4200a1800, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e098, 0xc4200a1800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e098, 0xc4200a1800, 0x2800, 0x2800, 0x1, 0x0, 0x60, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c260)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 182 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f5664d0, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc4202bc918, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc4202bc918, 0xc42029ad00, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc4202bc900, 0xc42029adbb, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc4202bc900, 0xc42029adbb, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x27c)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e2a0, 0xc42029adbb, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e2a0, 0xc42029adbb, 0x5, 0x5, 0x5, 0x557d40, 0xc42018bf00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e2a0, 0xc42029adbb, 0x5, 0x5, 0x5, 0x5, 0x2c0)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e2a0, 0x27c, 0x2bb, 0x27c, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000cae0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 184 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f5657f0, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc4202bca18, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc4202bca18, 0xc42029ad00, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc4202bca00, 0xc42029adfb, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc4202bca00, 0xc42029adfb, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x279)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e2b0, 0xc42029adfb, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e2b0, 0xc42029adfb, 0x5, 0x5, 0x5, 0x557d40, 0xc42024d700, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e2b0, 0xc42029adfb, 0x5, 0x5, 0x5, 0x5, 0x280)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e2b0, 0x279, 0x27b, 0x279, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000cb20)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 179 [runnable]:
internal/poll.runtime_pollWait(0x7f6e6f5658b0, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc4202bca98, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc4202bca98, 0xc42029ad00, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc4202bca80, 0xc42029ad40, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc4202bca80, 0xc42029ad40, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x89)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e2b8, 0xc42029ad40, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e2b8, 0xc42029ad40, 0x5, 0x5, 0x5, 0x557d40, 0xc4201b3e00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e2b8, 0xc42029ad40, 0x5, 0x5, 0x5, 0x0, 0x0)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e2b8, 0x89, 0xc0, 0x89, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.dispatchConnection(0x60cb80, 0xc42000e2b8, 0xc420080000)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:145 +0x375
created by main.main.func1
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:254 +0x2fe

goroutine 67 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f5652b0, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007af98, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007af98, 0xc420013a00, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007af80, 0xc420013ad0, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007af80, 0xc420013ad0, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x28c)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e120, 0xc420013ad0, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e120, 0xc420013ad0, 0x5, 0x5, 0x5, 0x557d40, 0xc42018ef00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e120, 0xc420013ad0, 0x5, 0x5, 0x5, 0x5, 0x2c0)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e120, 0x28c, 0x2bb, 0x28c, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000c4e0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 47 [syscall]:
syscall.Syscall(0x0, 0x13, 0xc420174000, 0x2800, 0xc4200afb00, 0xc42001f578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x13, 0xc420174000, 0x2800, 0x2800, 0xc42001f500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x13, 0xc420174000, 0x2800, 0x2800, 0xc42007ab80, 0xc4200afb00, 0xc42001f600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007ac80, 0xc420174000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007ac80, 0xc420174000, 0x2800, 0x2800, 0x10200000000, 0x0, 0xc420012e90)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e0f0, 0xc420174000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e0f0, 0xc420174000, 0x2800, 0x2800, 0x1, 0x0, 0x70, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c3a0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 49 [syscall]:
syscall.Syscall(0x0, 0x14, 0xc420176800, 0x2800, 0xc420186000, 0xc42018c578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x14, 0xc420176800, 0x2800, 0x2800, 0xc42018c500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x14, 0xc420176800, 0x2800, 0x2800, 0xc42007ac00, 0xc420186000, 0xc42018c600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007ad00, 0xc420176800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007ad00, 0xc420176800, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e0f8, 0xc420176800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e0f8, 0xc420176800, 0x2800, 0x2800, 0x1, 0x0, 0x70, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c3e0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 51 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f565430, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007ad98, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007ad98, 0xc420013000, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007ad80, 0xc420013000, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007ad80, 0xc420013000, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x50)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e100, 0xc420013000, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e100, 0xc420013000, 0x5, 0x5, 0x5, 0x557d40, 0xc42018cf00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e100, 0xc420013000, 0x5, 0x5, 0x5, 0x5, 0x60)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e100, 0x50, 0x5b, 0x50, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000c420)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 52 [syscall]:
syscall.Syscall(0x0, 0x16, 0xc420179000, 0x2800, 0xc420186600, 0xc42018d578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x16, 0xc420179000, 0x2800, 0x2800, 0xc42018d500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x16, 0xc420179000, 0x2800, 0x2800, 0xc42007ad80, 0xc420186600, 0xc42018d600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007ae00, 0xc420179000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007ae00, 0xc420179000, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e108, 0xc420179000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e108, 0xc420179000, 0x2800, 0x2800, 0x1, 0x0, 0x60, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c420)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 65 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f565d30, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007ae98, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007ae98, 0xc42029a500, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007ae80, 0xc42029a505, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007ae80, 0xc42029a505, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x2cc)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e110, 0xc42029a505, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e110, 0xc42029a505, 0x5, 0x5, 0x5, 0x557d40, 0xc42018e700, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e110, 0xc42029a505, 0x5, 0x5, 0x5, 0x5, 0x300)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e110, 0x2cc, 0x2fb, 0x2cc, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000c4a0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 82 [syscall]:
syscall.Syscall(0x0, 0x23, 0xc4201f0800, 0x2800, 0xc420186c00, 0xc420189d78, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x23, 0xc4201f0800, 0x2800, 0x2800, 0xc420189d00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x23, 0xc4201f0800, 0x2800, 0x2800, 0xc42007b600, 0xc420186c00, 0xc420189e00)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007b680, 0xc4201f0800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007b680, 0xc4201f0800, 0x2800, 0x2800, 0x10200000000, 0x0, 0xc42029a3e0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e188, 0xc4201f0800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e188, 0xc4201f0800, 0x2800, 0x2800, 0x1, 0x0, 0x1800, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c620)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 103 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f566650, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007bb18, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007bb18, 0xc42029a100, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007bb00, 0xc42029a1ba, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007bb00, 0xc42029a1ba, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x288)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e1d0, 0xc42029a1ba, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e1d0, 0xc42029a1ba, 0x5, 0x5, 0x5, 0x557d40, 0xc42024b700, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e1d0, 0xc42029a1ba, 0x5, 0x5, 0x5, 0x5, 0x2c0)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e1d0, 0x288, 0x2bb, 0x288, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000c7a0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 63 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f565bb0, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007af18, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007af18, 0xc420013f00, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007af00, 0xc420013fb0, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007af00, 0xc420013fb0, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x2fc)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e118, 0xc420013fb0, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e118, 0xc420013fb0, 0x5, 0x5, 0x5, 0x557d40, 0xc42001d700, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e118, 0xc420013fb0, 0x5, 0x5, 0x5, 0x5, 0x380)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e118, 0x2fc, 0x37b, 0x2fc, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000c460)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 64 [syscall]:
syscall.Syscall(0x0, 0x1b, 0xc42017b800, 0x2800, 0xc420187080, 0xc420023d78, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x1b, 0xc42017b800, 0x2800, 0x2800, 0xc420023d00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x1b, 0xc42017b800, 0x2800, 0x2800, 0xc42007af00, 0xc420187000, 0xc420023e00)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007b180, 0xc42017b800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007b180, 0xc42017b800, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e140, 0xc42017b800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e140, 0xc42017b800, 0x2800, 0x2800, 0x1, 0x0, 0x280, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c460)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 66 [syscall]:
syscall.Syscall(0x0, 0x1c, 0xc4201b4000, 0x2800, 0xc420187200, 0xc42018dd78, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x1c, 0xc4201b4000, 0x2800, 0x2800, 0xc42018dd00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x1c, 0xc4201b4000, 0x2800, 0x2800, 0xc42007ae80, 0xc420187200, 0xc42018de00)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007b200, 0xc4201b4000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007b200, 0xc4201b4000, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e148, 0xc4201b4000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e148, 0xc4201b4000, 0x2800, 0x2800, 0x1, 0x0, 0x700, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c4a0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 68 [syscall]:
syscall.Syscall(0x0, 0x1d, 0xc4201b6800, 0x2800, 0xc420187680, 0xc42018f578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x1d, 0xc4201b6800, 0x2800, 0x2800, 0xc42018f500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x1d, 0xc4201b6800, 0x2800, 0x2800, 0xc42007af80, 0xc420187600, 0xc42018f600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007b280, 0xc4201b6800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007b280, 0xc4201b6800, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e150, 0xc4201b6800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e150, 0xc4201b6800, 0x2800, 0x2800, 0x1, 0x0, 0x200, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c4e0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 70 [syscall]:
syscall.Syscall(0x0, 0x1e, 0xc4201b9000, 0x2800, 0xc420187e00, 0xc420188578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x1e, 0xc4201b9000, 0x2800, 0x2800, 0xc420188500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x1e, 0xc4201b9000, 0x2800, 0x2800, 0xc42007b000, 0xc420187e00, 0xc420188600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007b300, 0xc4201b9000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007b300, 0xc4201b9000, 0x2800, 0x2800, 0x10200000000, 0x0, 0xc420013f80)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e158, 0xc4201b9000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e158, 0xc4201b9000, 0x2800, 0x2800, 0x1, 0x0, 0x580, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c520)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 72 [syscall]:
syscall.Syscall(0x0, 0x1f, 0xc4201bb800, 0x2800, 0xc4201d6300, 0xc420189578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x1f, 0xc4201bb800, 0x2800, 0x2800, 0xc420189500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x1f, 0xc4201bb800, 0x2800, 0x2800, 0xc42007b080, 0xc4201d6300, 0xc420189600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007b380, 0xc4201bb800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007b380, 0xc4201bb800, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e160, 0xc4201bb800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e160, 0xc4201bb800, 0x2800, 0x2800, 0x1, 0x0, 0x140, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c560)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 74 [syscall]:
syscall.Syscall(0x0, 0x20, 0xc4201ee000, 0x2800, 0xc4201d6780, 0xc42018a578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x20, 0xc4201ee000, 0x2800, 0x2800, 0xc42018a500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x20, 0xc4201ee000, 0x2800, 0x2800, 0xc42007b100, 0xc4201d6700, 0xc42018a600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007b400, 0xc4201ee000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007b400, 0xc4201ee000, 0x2800, 0x2800, 0x10200000000, 0x0, 0xc420013690)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e168, 0xc4201ee000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e168, 0xc4201ee000, 0x2800, 0x2800, 0x1, 0x0, 0xe0, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c5a0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 76 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f566c50, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007b498, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007b498, 0xc42020e000, 0x8000, 0x8000)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007b480, 0xc42020e000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007b480, 0xc42020e000, 0x8000, 0x8000, 0xc42000e178, 0xc42020e000, 0x33)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e170, 0xc42020e000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.copyBuffer(0x60aca0, 0xc420036640, 0x7f6e6f5660b8, 0xc42000e170, 0xc42020e000, 0x8000, 0x8000, 0xc420036640, 0xc420036640, 0x53ef80)
/usr/lib/go-1.9/src/io/io.go:392 +0x123
io.Copy(0x60aca0, 0xc420036640, 0x7f6e6f5660b8, 0xc42000e170, 0x0, 0x1000000004d954d, 0x200)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
net.genericReadFrom(0x60a6e0, 0xc42000e178, 0x7f6e6f5660b8, 0xc42000e170, 0x0, 0x0, 0x500)
/usr/lib/go-1.9/src/net/net.go:595 +0x84
net.(*TCPConn).readFrom(0xc42000e178, 0x7f6e6f5660b8, 0xc42000e170, 0x0, 0xc42018aea0, 0x41009d)
/usr/lib/go-1.9/src/net/tcpsock_posix.go:51 +0xa5
net.(*TCPConn).ReadFrom(0xc42000e178, 0x7f6e6f5660b8, 0xc42000e170, 0x7f6e6f566180, 0xc42000e178, 0x10200000201)
/usr/lib/go-1.9/src/net/tcpsock.go:103 +0x5f
io.copyBuffer(0x60a6e0, 0xc42000e178, 0x7f6e6f5660b8, 0xc42000e170, 0x0, 0x0, 0x0, 0x557d40, 0x60cb00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:386 +0x2bb
io.Copy(0x60a6e0, 0xc42000e178, 0x7f6e6f5660b8, 0xc42000e170, 0xc42000e170, 0x0, 0x0)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
main.(*webPair).remoteToServer(0xc42000c5e0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:54 +0xae
created by main.dispatchConnection.func1
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:105 +0x142

goroutine 77 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f566b90, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007b598, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007b598, 0xc420206000, 0x8000, 0x8000)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007b580, 0xc420206000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007b580, 0xc420206000, 0x8000, 0x8000, 0xc42000e170, 0xc420206000, 0x98)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e178, 0xc420206000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.copyBuffer(0x60aca0, 0xc420036630, 0x7f6e6f5660b8, 0xc42000e178, 0xc420206000, 0x8000, 0x8000, 0xc420036630, 0xc420036630, 0x53ef80)
/usr/lib/go-1.9/src/io/io.go:392 +0x123
io.Copy(0x60aca0, 0xc420036630, 0x7f6e6f5660b8, 0xc42000e178, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
net.genericReadFrom(0x60a6e0, 0xc42000e170, 0x7f6e6f5660b8, 0xc42000e178, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:595 +0x84
net.(*TCPConn).readFrom(0xc42000e170, 0x7f6e6f5660b8, 0xc42000e178, 0x0, 0xc42018b6a0, 0x41009d)
/usr/lib/go-1.9/src/net/tcpsock_posix.go:51 +0xa5
net.(*TCPConn).ReadFrom(0xc42000e170, 0x7f6e6f5660b8, 0xc42000e178, 0x7f6e6f566180, 0xc42000e170, 0x10200000001)
/usr/lib/go-1.9/src/net/tcpsock.go:103 +0x5f
io.copyBuffer(0x60a6e0, 0xc42000e170, 0x7f6e6f5660b8, 0xc42000e178, 0x0, 0x0, 0x0, 0x557d40, 0x0, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:386 +0x2bb
io.Copy(0x60a6e0, 0xc42000e170, 0x7f6e6f5660b8, 0xc42000e178, 0xc42000e178, 0x0, 0x0)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
main.(*webPair).serverToRemote(0xc42000c5e0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:44 +0xae
created by main.dispatchConnection.func1
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:106 +0x164

goroutine 81 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f565070, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007b618, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007b618, 0xc42029a300, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007b600, 0xc42029a3c0, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007b600, 0xc42029a3c0, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x1dd)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e180, 0xc42029a3c0, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e180, 0xc42029a3c0, 0x5, 0x5, 0x5, 0x557d40, 0xc42018b700, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e180, 0xc42029a3c0, 0x5, 0x5, 0x5, 0x5, 0x200)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e180, 0x1dd, 0x1fb, 0x1dd, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000c620)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 84 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f566a10, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007b718, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007b718, 0xc42022e000, 0x8000, 0x8000)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007b700, 0xc42022e000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007b700, 0xc42022e000, 0x8000, 0x8000, 0xc42000e1a0, 0xc42022e000, 0x1bb)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e190, 0xc42022e000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.copyBuffer(0x60aca0, 0xc420036680, 0x7f6e6f5660b8, 0xc42000e190, 0xc42022e000, 0x8000, 0x8000, 0xc420036680, 0xc420036680, 0x53ef80)
/usr/lib/go-1.9/src/io/io.go:392 +0x123
io.Copy(0x60aca0, 0xc420036680, 0x7f6e6f5660b8, 0xc42000e190, 0x0, 0x1000000004d954d, 0x200)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
net.genericReadFrom(0x60a6e0, 0xc42000e1a0, 0x7f6e6f5660b8, 0xc42000e190, 0x0, 0x0, 0x500)
/usr/lib/go-1.9/src/net/net.go:595 +0x84
net.(*TCPConn).readFrom(0xc42000e1a0, 0x7f6e6f5660b8, 0xc42000e190, 0x0, 0xc42018aea0, 0x41009d)
/usr/lib/go-1.9/src/net/tcpsock_posix.go:51 +0xa5
net.(*TCPConn).ReadFrom(0xc42000e1a0, 0x7f6e6f5660b8, 0xc42000e190, 0x7f6e6f566180, 0xc42000e1a0, 0x10200000201)
/usr/lib/go-1.9/src/net/tcpsock.go:103 +0x5f
io.copyBuffer(0x60a6e0, 0xc42000e1a0, 0x7f6e6f5660b8, 0xc42000e190, 0x0, 0x0, 0x0, 0x557d40, 0x60cb00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:386 +0x2bb
io.Copy(0x60a6e0, 0xc42000e1a0, 0x7f6e6f5660b8, 0xc42000e190, 0xc42000e190, 0x433148, 0x5695a0)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
main.(*webPair).remoteToServer(0xc42000c6a0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:54 +0xae
created by main.dispatchConnection.func1
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:105 +0x142

goroutine 85 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f566950, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007b818, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007b818, 0xc420226000, 0x8000, 0x8000)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007b800, 0xc420226000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007b800, 0xc420226000, 0x8000, 0x8000, 0xc42000e190, 0xc420226000, 0x1708)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e1a0, 0xc420226000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.copyBuffer(0x60aca0, 0xc420036670, 0x7f6e6f5660b8, 0xc42000e1a0, 0xc420226000, 0x8000, 0x8000, 0xc420036670, 0xc420036670, 0x53ef80)
/usr/lib/go-1.9/src/io/io.go:392 +0x123
io.Copy(0x60aca0, 0xc420036670, 0x7f6e6f5660b8, 0xc42000e1a0, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
net.genericReadFrom(0x60a6e0, 0xc42000e190, 0x7f6e6f5660b8, 0xc42000e1a0, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:595 +0x84
net.(*TCPConn).readFrom(0xc42000e190, 0x7f6e6f5660b8, 0xc42000e1a0, 0x0, 0xc42018bea0, 0x41009d)
/usr/lib/go-1.9/src/net/tcpsock_posix.go:51 +0xa5
net.(*TCPConn).ReadFrom(0xc42000e190, 0x7f6e6f5660b8, 0xc42000e1a0, 0x7f6e6f566180, 0xc42000e190, 0x10200000001)
/usr/lib/go-1.9/src/net/tcpsock.go:103 +0x5f
io.copyBuffer(0x60a6e0, 0xc42000e190, 0x7f6e6f5660b8, 0xc42000e1a0, 0x0, 0x0, 0x0, 0x557d40, 0x0, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:386 +0x2bb
io.Copy(0x60a6e0, 0xc42000e190, 0x7f6e6f5660b8, 0xc42000e1a0, 0xc42000e1a0, 0x0, 0x0)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
main.(*webPair).serverToRemote(0xc42000c6a0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:44 +0xae
created by main.dispatchConnection.func1
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:106 +0x164

goroutine 161 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f56be50, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc4202bc718, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc4202bc718, 0xc420310000, 0x8000, 0x8000)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc4202bc700, 0xc420310000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc4202bc700, 0xc420310000, 0x8000, 0x8000, 0xc42000e270, 0xc420310000, 0x610)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e280, 0xc420310000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.copyBuffer(0x60aca0, 0xc4200367b0, 0x7f6e6f5660b8, 0xc42000e280, 0xc420310000, 0x8000, 0x8000, 0xc4200367b0, 0xc4200367b0, 0x53ef80)
/usr/lib/go-1.9/src/io/io.go:392 +0x123
io.Copy(0x60aca0, 0xc4200367b0, 0x7f6e6f5660b8, 0xc42000e280, 0x0, 0x60a520, 0xc420036110)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
net.genericReadFrom(0x60a6e0, 0xc42000e270, 0x7f6e6f5660b8, 0xc42000e280, 0x0, 0x0, 0x300000000)
/usr/lib/go-1.9/src/net/net.go:595 +0x84
net.(*TCPConn).readFrom(0xc42000e270, 0x7f6e6f5660b8, 0xc42000e280, 0x417793, 0xc42024aea0, 0x41009d)
/usr/lib/go-1.9/src/net/tcpsock_posix.go:51 +0xa5
net.(*TCPConn).ReadFrom(0xc42000e270, 0x7f6e6f5660b8, 0xc42000e280, 0x7f6e6f566180, 0xc42000e270, 0x10200484401)
/usr/lib/go-1.9/src/net/tcpsock.go:103 +0x5f
io.copyBuffer(0x60a6e0, 0xc42000e270, 0x7f6e6f5660b8, 0xc42000e280, 0x0, 0x0, 0x0, 0x557d40, 0x54d100, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:386 +0x2bb
io.Copy(0x60a6e0, 0xc42000e270, 0x7f6e6f5660b8, 0xc42000e280, 0xc42000e280, 0x433148, 0x5695a0)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
main.(*webPair).serverToRemote(0xc42000ca20)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:44 +0xae
created by main.dispatchConnection.func1
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:106 +0x164

goroutine 177 [runnable]:
internal/poll.runtime_pollWait(0x7f6e6f566590, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc4202bc998, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc4202bc998, 0xc42029ac00, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc4202bc980, 0xc42029ac90, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc4202bc980, 0xc42029ac90, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x89)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e2a8, 0xc42029ac90, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e2a8, 0xc42029ac90, 0x5, 0x5, 0x5, 0x557d40, 0xc420031e00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e2a8, 0xc42029ac90, 0x5, 0x5, 0x5, 0x0, 0x0)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e2a8, 0x89, 0xc0, 0x89, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.dispatchConnection(0x60cb80, 0xc42000e2a8, 0xc420080000)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:145 +0x375
created by main.main.func1
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:254 +0x2fe

goroutine 180 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f5667d0, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc4202bc898, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc4202bc898, 0xc42029ad00, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc4202bc880, 0xc42029ad7b, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc4202bc880, 0xc42029ad7b, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x279)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e298, 0xc42029ad7b, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e298, 0xc42029ad7b, 0x5, 0x5, 0x5, 0x557d40, 0xc42024c700, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e298, 0xc42029ad7b, 0x5, 0x5, 0x5, 0x5, 0x280)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e298, 0x279, 0x27b, 0x279, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000caa0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 174 [syscall]:
syscall.Syscall(0x0, 0x26, 0xc4202e5000, 0x2800, 0xc420262300, 0xc420246578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x26, 0xc4202e5000, 0x2800, 0x2800, 0xc420246500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x26, 0xc4202e5000, 0x2800, 0x2800, 0xc4202bc780, 0xc420262300, 0xc420246600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc4202bc800, 0xc4202e5000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc4202bc800, 0xc4202e5000, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e290, 0xc4202e5000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e290, 0xc4202e5000, 0x2800, 0x2800, 0x1, 0x0, 0x70, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000ca60)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 121 [syscall]:
syscall.Syscall(0x0, 0x10, 0xc42029e800, 0x2800, 0xc420262480, 0xc420247578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x10, 0xc42029e800, 0x2800, 0x2800, 0xc420247500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x10, 0xc42029e800, 0x2800, 0x2800, 0xc42007bf80, 0xc420262400, 0xc420247600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc4202bc000, 0xc42029e800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc4202bc000, 0xc42029e800, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e220, 0xc42029e800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e220, 0xc42029e800, 0x2800, 0x2800, 0x1, 0x0, 0x140, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c8a0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 101 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f566710, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc42007ba98, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc42007ba98, 0xc42029a200, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc42007ba80, 0xc42029a265, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc42007ba80, 0xc42029a265, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x289)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e1c8, 0xc42029a265, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e1c8, 0xc42029a265, 0x5, 0x5, 0x5, 0x557d40, 0xc42001ff00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e1c8, 0xc42029a265, 0x5, 0x5, 0x5, 0x5, 0x2c0)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e1c8, 0x289, 0x2bb, 0x289, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000c760)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 102 [syscall]:
syscall.Syscall(0x0, 0x2d, 0xc420276000, 0x2800, 0xc420262780, 0xc42024a578, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x2d, 0xc420276000, 0x2800, 0x2800, 0xc42024a500, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x2d, 0xc420276000, 0x2800, 0x2800, 0xc42007ba80, 0xc420262700, 0xc42024a600)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007bd00, 0xc420276000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007bd00, 0xc420276000, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e1f0, 0xc420276000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e1f0, 0xc420276000, 0x2800, 0x2800, 0x1, 0x0, 0x900, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c760)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 104 [syscall]:
syscall.Syscall(0x0, 0x2e, 0xc420278800, 0x2800, 0xc420262c00, 0xc42024bd78, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x2e, 0xc420278800, 0x2800, 0x2800, 0xc42024bd00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x2e, 0xc420278800, 0x2800, 0x2800, 0xc42007bb00, 0xc420262c00, 0xc42024be00)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007bd80, 0xc420278800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007bd80, 0xc420278800, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e1f8, 0xc420278800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e1f8, 0xc420278800, 0x2800, 0x2800, 0x1, 0x0, 0xc00, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c7a0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 106 [syscall]:
syscall.Syscall(0x0, 0x2f, 0xc42027b000, 0x2800, 0xc420263080, 0xc42024cd78, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x2f, 0xc42027b000, 0x2800, 0x2800, 0xc42024cd00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x2f, 0xc42027b000, 0x2800, 0x2800, 0xc42007bb80, 0xc420263000, 0xc42024ce00)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007be00, 0xc42027b000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007be00, 0xc42027b000, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e200, 0xc42027b000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e200, 0xc42027b000, 0x2800, 0x2800, 0x1, 0x0, 0xf0, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c7e0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 108 [syscall]:
syscall.Syscall(0x0, 0x30, 0xc42027d800, 0x2800, 0xc420263500, 0xc42024dd78, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x30, 0xc42027d800, 0x2800, 0x2800, 0xc42024dd00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x30, 0xc42027d800, 0x2800, 0x2800, 0xc42007bc00, 0xc420263500, 0xc42024de00)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007be80, 0xc42027d800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007be80, 0xc42027d800, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e208, 0xc42027d800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e208, 0xc42027d800, 0x2800, 0x2800, 0x1, 0x0, 0xf0, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c820)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 110 [syscall]:
syscall.Syscall(0x0, 0x31, 0xc42029c000, 0x2800, 0xc420263680, 0xc420246d78, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x31, 0xc42029c000, 0x2800, 0x2800, 0xc420246d00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x31, 0xc42029c000, 0x2800, 0x2800, 0xc42007bc80, 0xc420263600, 0xc420246e00)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc42007bf00, 0xc42029c000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc42007bf00, 0xc42029c000, 0x2800, 0x2800, 0x10200000000, 0x0, 0x0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e210, 0xc42029c000, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e210, 0xc42029c000, 0x2800, 0x2800, 0x1, 0x0, 0xf0, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c860)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 137 [syscall]:
syscall.Syscall(0x0, 0x12, 0xc4202a3800, 0x2800, 0xc420263e00, 0xc420247d78, 0x483b80)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x12, 0xc4202a3800, 0x2800, 0x2800, 0xc420247d00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x12, 0xc4202a3800, 0x2800, 0x2800, 0xc4202bc180, 0xc420263e00, 0xc420247e00)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc4202bc200, 0xc4202a3800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc4202bc200, 0xc4202a3800, 0x2800, 0x2800, 0x10200000000, 0x0, 0xc42029a4f0)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e240, 0xc4202a3800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e240, 0xc4202a3800, 0x2800, 0x2800, 0x1, 0x0, 0xe0, 0x0)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000c920)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

goroutine 173 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f566410, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc4202bc798, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc4202bc798, 0xc42029ad00, 0x5, 0x5)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc4202bc780, 0xc42029ad60, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc4202bc780, 0xc42029ad60, 0x5, 0x5, 0xc420016070, 0xc420016000, 0x55)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e288, 0xc42029ad60, 0x5, 0x5, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e288, 0xc42029ad60, 0x5, 0x5, 0x5, 0x557d40, 0xc42024af00, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
io.ReadFull(0x7f6e6f5660b8, 0xc42000e288, 0xc42029ad60, 0x5, 0x5, 0x5, 0x5, 0x60)
/usr/lib/go-1.9/src/io/io.go:327 +0x58
github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x60cb80, 0xc42000e288, 0x55, 0x5b, 0x55, 0x0, 0x0)
/home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/TLS.go:56 +0xd5
main.(*ssPair).remoteToServer(0xc42000ca60)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:64 +0x3c
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:113 +0xf3

goroutine 160 [IO wait]:
internal/poll.runtime_pollWait(0x7f6e6f56bf10, 0x72, 0x0)
/usr/lib/go-1.9/src/runtime/netpoll.go:173 +0x57
internal/poll.(*pollDesc).wait(0xc4202bc518, 0x72, 0xffffffffffffff00, 0x60ad20, 0x609380)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:85 +0xae
internal/poll.(*pollDesc).waitRead(0xc4202bc518, 0xc420318000, 0x8000, 0x8000)
/usr/lib/go-1.9/src/internal/poll/fd_poll_runtime.go:90 +0x3d
internal/poll.(*FD).Read(0xc4202bc500, 0xc420318000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:126 +0x18a
net.(*netFD).Read(0xc4202bc500, 0xc420318000, 0x8000, 0x8000, 0xc42000e280, 0xc420318000, 0x1cc)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e270, 0xc420318000, 0x8000, 0x8000, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.copyBuffer(0x60aca0, 0xc4200367c0, 0x7f6e6f5660b8, 0xc42000e270, 0xc420318000, 0x8000, 0x8000, 0xc4200367c0, 0xc4200367c0, 0x53ef80)
/usr/lib/go-1.9/src/io/io.go:392 +0x123
io.Copy(0x60aca0, 0xc4200367c0, 0x7f6e6f5660b8, 0xc42000e270, 0x0, 0x1000000004d954d, 0x200)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
net.genericReadFrom(0x60a6e0, 0xc42000e280, 0x7f6e6f5660b8, 0xc42000e270, 0x0, 0x0, 0x500)
/usr/lib/go-1.9/src/net/net.go:595 +0x84
net.(*TCPConn).readFrom(0xc42000e280, 0x7f6e6f5660b8, 0xc42000e270, 0x417793, 0xc420248ea0, 0x41009d)
/usr/lib/go-1.9/src/net/tcpsock_posix.go:51 +0xa5
net.(*TCPConn).ReadFrom(0xc42000e280, 0x7f6e6f5660b8, 0xc42000e270, 0x7f6e6f566180, 0xc42000e280, 0x10200000001)
/usr/lib/go-1.9/src/net/tcpsock.go:103 +0x5f
io.copyBuffer(0x60a6e0, 0xc42000e280, 0x7f6e6f5660b8, 0xc42000e270, 0x0, 0x0, 0x0, 0x557d40, 0x54d100, 0x7f6e6f5660b8)
/usr/lib/go-1.9/src/io/io.go:386 +0x2bb
io.Copy(0x60a6e0, 0xc42000e280, 0x7f6e6f5660b8, 0xc42000e270, 0xc42000e270, 0x433148, 0x5695a0)
/usr/lib/go-1.9/src/io/io.go:362 +0x68
main.(*webPair).remoteToServer(0xc42000ca20)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:54 +0xae
created by main.dispatchConnection.func1
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:105 +0x142

goroutine 185 [runnable]:
syscall.Syscall(0x0, 0x35, 0xc420328800, 0x2800, 0xe30, 0x2800, 0x0)
/usr/lib/go-1.9/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x35, 0xc420328800, 0x2800, 0x2800, 0xc420248d00, 0x0, 0x0)
/usr/lib/go-1.9/src/syscall/zsyscall_linux_amd64.go:756 +0x55
syscall.Read(0x35, 0xc420328800, 0x2800, 0x2800, 0x200, 0x1fc, 0x197)
/usr/lib/go-1.9/src/syscall/syscall_unix.go:162 +0x49
internal/poll.(*FD).Read(0xc4202bcc00, 0xc420328800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/internal/poll/fd_unix.go:122 +0x125
net.(*netFD).Read(0xc4202bcc00, 0xc420328800, 0x2800, 0x2800, 0x10200000000, 0x0, 0xc420328800)
/usr/lib/go-1.9/src/net/fd_unix.go:202 +0x52
net.(*conn).Read(0xc42000e2d0, 0xc420328800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/lib/go-1.9/src/net/net.go:176 +0x6d
io.ReadAtLeast(0x7f6e6f5660b8, 0xc42000e2d0, 0xc420328800, 0x2800, 0x2800, 0x1, 0xc420080000, 0x511f30, 0x60cb80)
/usr/lib/go-1.9/src/io/io.go:309 +0x86
main.(*ssPair).serverToRemote(0xc42000cb20)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:81 +0xdd
created by main.dispatchConnection.func2
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:114 +0x115

rax 0x0
rbx 0x7f6e6f1cb868
rcx 0xffffffffffffffff
rdx 0x6
rdi 0x4d5
rsi 0x4f8
rbp 0x57a7ea
rsp 0x7f6e3d7fa9c8
r8 0xa
r9 0x7f6e3d7fb700
r10 0x8
r11 0x202
r12 0x7f6e5c0008c0
r13 0xf1
r14 0x11
r15 0x0
rip 0x7f6e6ee455f7
rflags 0x202
cs 0x33
fs 0x0
gs 0x0

SSR is faster

@cbeuw
After several tests it seems that SSR is performing TLS shake faster.

SS+GQ = takes 3-4 seconds to open the page

The same page with SSR tls1.2_ticket_auth opens it in 1-2 seconds.

"panic: runtime error: slice bounds out of range" after non SS traffic

Hello. After couple of days normal work, in one moment I find out that my shadowsocks client can't connect to server. I logged via ssh and see that the shadowsocks service down, because goquiet chashed. There is journalctl -xe excerpt:

Oct 03 15:00:08 vps ss-server[433]: 2018/10/03 15:00:08 +1 non SS traffic from 151.68.102.223:36605
Oct 03 15:00:08 vps ss-server[433]: panic: runtime error: slice bounds out of range
Oct 03 15:00:08 vps ss-server[433]: goroutine 351460 [running]:
Oct 03 15:00:08 vps ss-server[433]: github.com/cbeuw/GoQuiet/gqserver.ReadTillDrain(0x57b200, 0xc00000e128, 0xc00072d000, 0x5000, 0x5000, 0x0, 0x0, 0x0)
Oct 03 15:00:08 vps ss-server[433]:         /home/andy/go/src/github.com/cbeuw/GoQuiet/gqserver/util.go:54 +0x30e
Oct 03 15:00:08 vps ss-server[433]: main.(*ssPair).remoteToServer(0xc00000c420)
Oct 03 15:00:08 vps ss-server[433]:         /home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:68 +0x9c
Oct 03 15:00:08 vps ss-server[433]: created by main.dispatchConnection.func2
Oct 03 15:00:08 vps ss-server[433]:         /home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-server/gq-server.go:117 +0xc8
Oct 03 15:00:08 vps ss-server[433]:  2018-10-03 15:00:08 ERROR: plugin service exit unexpectedly
Oct 03 15:00:08 vps systemd[1]: shadowsocks-libev-goquet.service: Main process exited, code=exited, status=255/n/a
Oct 03 15:00:08 vps systemd[1]: shadowsocks-libev-goquet.service: Unit entered failed state.
Oct 03 15:00:08 vps systemd[1]: shadowsocks-libev-goquet.service: Failed with result 'exit-code'.

shadowsocks-libev 3.2.0
goquiet 1.2.1
ubuntu 16.04.5 (2.6.32-042stab127.2 kernel)

Thank you, and sorry my bad English.

When can it support Android?

Unlike Simple-obfs,it only works on desktop.But I think it will be more convenient if it can support android.

client out of memory with ss-redir

ss-local + gq-client work fine on R7000 router,
ss-redir works fine,
ss-redir + gq-client OOM and crash at light network load (almost the same RAM usage with ss-local)

gq-client-linux-arm-1.2.2 (plugin mode)
shadowsocks-libev 3.2.0
Asuswrt-Merlin firmware

Mem: 86740K used, 168976K free, 2460K shrd, 1552K buff, 21676K cached
ss-redir + gq-client use about 10MB RAM

{
    "ServerName":"www.bing.com",
    "Key":"",
    "TicketTimeHint":3600,
    "Browser":"chrome"
}
 2018-10-18 03:48:34 INFO: plugin "gq-client" enabled
 2018-10-18 03:48:34 INFO: initializing ciphers... chacha20-ietf-poly1305
 2018-10-18 03:48:34 INFO: This system doesn't provide enough entropy to quickly generate high-quality random numbers.
Installing the rng-utils/rng-tools, jitterentropy or haveged packages may help.
On virtualized Linux environments, also consider using virtio-rng.
The service will not start until enough entropy has been collected.

 2018-10-18 03:48:34 INFO: listening at 0.0.0.0:7777
 2018-10-18 03:48:34 INFO: UDP relay enabled
 2018-10-18 03:48:35 INFO: running from root user
fatal error: runtime: out of memory

runtime stack:
runtime.throw(0x158579, 0x16)
/usr/local/go/src/runtime/panic.go:608 +0x5c
runtime.sysMap(0xc00000, 0x400000, 0x255e58)
/usr/local/go/src/runtime/mem_linux.go:156 +0xac
runtime.(*linearAlloc).alloc(0x24a744, 0x400000, 0x400000, 0x255e58, 0x0)
/usr/local/go/src/runtime/malloc.go:1230 +0x94
runtime.(*mheap).sysAlloc(0x249c80, 0x400000, 0x0, 0x322dc)
/usr/local/go/src/runtime/malloc.go:525 +0x54
runtime.(*mheap).grow(0x249c80, 0x5, 0x0)
/usr/local/go/src/runtime/mheap.go:920 +0x2c
runtime.(*mheap).allocSpanLocked(0x249c80, 0x5, 0x255e68, 0x0)
/usr/local/go/src/runtime/mheap.go:848 +0x320
runtime.(*mheap).alloc_m(0x249c80, 0x5, 0x7b, 0x0)
/usr/local/go/src/runtime/mheap.go:692 +0x118
runtime.(*mheap).alloc.func1()
/usr/local/go/src/runtime/mheap.go:759 +0x3c
runtime.(*mheap).alloc(0x249c80, 0x5, 0x1007b, 0x0)
/usr/local/go/src/runtime/mheap.go:758 +0x60
runtime.(*mcentral).grow(0x24c610, 0x0)
/usr/local/go/src/runtime/mcentral.go:232 +0x94
runtime.(*mcentral).cacheSpan(0x24c610, 0x246d20)
/usr/local/go/src/runtime/mcentral.go:106 +0x34c
runtime.(*mcache).refill(0x40098000, 0x11277b)
/usr/local/go/src/runtime/mcache.go:122 +0x7c
runtime.(*mcache).nextFree.func1()
/usr/local/go/src/runtime/malloc.go:749 +0x24
runtime.systemstack(0x643c0)
/usr/local/go/src/runtime/asm_arm.s:354 +0x84
runtime.mstart()
/usr/local/go/src/runtime/proc.go:1229

goroutine 1231 [running]:
runtime.systemstack_switch()
/usr/local/go/src/runtime/asm_arm.s:298 +0x4 fp=0xb50f0c sp=0xb50f08 pc=0x644c8
runtime.(*mcache).nextFree(0x40098000, 0x7b, 0x0, 0x0, 0x0)
/usr/local/go/src/runtime/malloc.go:748 +0xa4 fp=0xb50f38 sp=0xb50f0c pc=0x19e64
runtime.mallocgc(0x5000, 0x136b18, 0x1, 0x0)
/usr/local/go/src/runtime/malloc.go:903 +0x768 fp=0xb50fa0 sp=0xb50f38 pc=0x1a784
runtime.makeslice(0x136b18, 0x5000, 0x5000, 0x0, 0x0, 0x0)
/usr/local/go/src/runtime/slice.go:70 +0x68 fp=0xb50fb4 sp=0xb50fa0 pc=0x4f69c
main.(*pair).remoteToSS(0x743e80)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-client/gq-client.go:39 +0x28 fp=0xb50fe4 sp=0xb50fb4 pc=0x111dc4
runtime.goexit()
/usr/local/go/src/runtime/asm_arm.s:867 +0x4 fp=0xb50fe4 sp=0xb50fe4 pc=0x66210
created by main.initSequence
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-client/gq-client.go:131 +0x5d0

goroutine 1 [IO wait]:
internal/poll.runtime_pollWait(0x502e9fc0, 0x72, 0x0)
/usr/local/go/src/runtime/netpoll.go:173 +0x44
internal/poll.(*pollDesc).wait(0x4840b4, 0x72, 0x440300, 0x0, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:85 +0x7c
internal/poll.(*pollDesc).waitRead(0x4840b4, 0xffffff00, 0x0, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:90 +0x2c
internal/poll.(*FD).Accept(0x4840a0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/internal/poll/fd_unix.go:384 +0x17c
net.(*netFD).accept(0x4840a0, 0x452ce8, 0x42cf8, 0x112d00)
/usr/local/go/src/net/fd_unix.go:238 +0x20
net.(*TCPListener).accept(0x40c278, 0x494f14, 0x494f18, 0xc)
/usr/local/go/src/net/tcpsock_posix.go:139 +0x20
net.(*TCPListener).Accept(0x40c278, 0x15e61c, 0x178f60, 0x452ce8, 0x484050)
/usr/local/go/src/net/tcpsock.go:260 +0x3c
main.main()
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-client/gq-client.go:214 +0x3f4

goroutine 132 [IO wait]:
internal/poll.runtime_pollWait(0x502e9140, 0x72, 0x8e774)
/usr/local/go/src/runtime/netpoll.go:173 +0x44
internal/poll.(*pollDesc).wait(0x4850a4, 0x72, 0xffffff00, 0x1788a0, 0x230048)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:85 +0x7c
internal/poll.(*pollDesc).waitRead(0x4850a4, 0x5ad800, 0x2800, 0x2800)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:90 +0x2c
internal/poll.(*FD).Read(0x485090, 0x5ad800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/local/go/src/internal/poll/fd_unix.go:169 +0x14c
net.(*netFD).Read(0x485090, 0x5ad800, 0x2800, 0x2800, 0x1ff, 0x1, 0x177)
/usr/local/go/src/net/fd_unix.go:202 +0x38
net.(*conn).Read(0x40c848, 0x5ad800, 0x2800, 0x2800, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:177 +0x58
io.ReadAtLeast(0x502ea070, 0x40c848, 0x5ad800, 0x2800, 0x2800, 0x1, 0x0, 0x380, 0x0)
/usr/local/go/src/io/io.go:310 +0x6c
main.(*pair).ssToRemote(0x44eb40)
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-client/gq-client.go:58 +0x94
created by main.initSequence
/home/andy/go/src/github.com/cbeuw/GoQuiet/cmd/gq-client/gq-client.go:132 +0x5ec

goroutine *** [IO wait]:
.
.
.
.
.

 2018-10-18 03:48:57 ERROR: remote recv: Connection reset by peer
 2018-10-18 03:48:57 ERROR: remote recv: Connection reset by peer
 2018-10-18 03:48:57 ERROR: plugin service exit unexpectedly
 2018-10-18 03:48:57 ERROR: getpeername: Transport endpoint is not connected
 2018-10-18 03:48:57 ERROR: getpeername: Transport endpoint is not connected

Still catched by Local ISP

Version 1.1.2
Client
{
"ServerName":"www.oracle.com",
"Key":"XXXXXX",
"TicketTimeHint":3600,
"Browser":"chrome",
"FastOpen":false
}
Server
{
"WebServerAddr":"2.19.128.136:443",
"Key":"XXXXXX",
"FastOpen":false
}

ss-libev run with xchacha20-ietf-poly1305 method.

At first, connection is fine. after about an hour with some traffic (no big download, just some browser), 443 port is blocked in local ISP. Stop client for about a day, 443 port is opened again.

Local ISP is very sensitive that tls1.2 from ssr or tls from simple-obfs is blocked after some traffic too. Only ws over https can work on port 443.

too many colons in address

@cbeuw

[root@new_one ~]# ss-server -c /etc/shadowsocks-libev/config.json --plugin gq-server --plugin-opts "gqserver.json"
 2018-03-24 12:24:16 INFO: using tcp fast open
 2018-03-24 12:24:16 INFO: plugin "gq-server" enabled
 2018-03-24 12:24:16 INFO: initializing ciphers... aes-256-gcm
 2018-03-24 12:24:16 INFO: tcp server listening at 127.0.0.1:57789
 2018-03-24 12:24:16 INFO: running from root user
2018/03/24 12:24:16 Listening on ::0|0.0.0.0:8053
2018/03/24 12:24:16 address ::0|0.0.0.0:8053: too many colons in address
 2018-03-24 12:24:16 ERROR: plugin service exit unexpectedly

Maybe it's because GoQuiet don't support ipv6 yet?
If so, really hope ipv6 support could be added in the coming versions~

Launch by ss-server reports `panic: runtime error: index out of range`

Since v1.0.0 Add standalone mode when launch gq-server as a shadowsocks plugin, it reports panic: runtime error: index out of range. But not before v1.0.0.

  • Launched OK v0.1.0

    $ ss-server -s 127.0.0.1 -p 8388 -k 123 -m rc4-md5 -v --plugin gq-server-linux64-0.1.0 --plugin-opts gqserver.json
    2018-03-19 20:11:23 INFO: plugin "gq-server-linux64-0.1.0" enabled
    2018-03-19 20:11:23 INFO: initializing ciphers... rc4-md5
    2018-03-19 20:11:23 INFO: tcp server listening at 127.0.0.1:53311
    2018/03/19 20:11:23 Listening on 127.0.0.1:8388
  • Panic v1.0.0, v1.0.1 & v1.0.2

    $ ss-server -s 127.0.0.1 -p 8388 -k 123 -m rc4-md5 -v --plugin gq-server-linux64-1.0.0 --plugin-opts gqserver.json
    2018-03-19 20:11:54 INFO: plugin "gq-server-linux64-1.0.0" enabled
    2018-03-19 20:11:54 INFO: initializing ciphers... rc4-md5
    2018-03-19 20:11:54 INFO: tcp server listening at 127.0.0.1:36343
    panic: runtime error: index out of range
    
    goroutine 1 [running]:
    flag.init()
            /usr/lib/go-1.9/src/flag/flag.go:952 +0x137
    main.init()
            <autogenerated>:1 +0x44
    2018-03-19 20:11:54 ERROR: plugin service exit unexpectedly
    2018-03-19 20:11:54 INFO: closed gracefully

Please exit with code zero while passing argument "-h"

Hello!

I'm trying to add this project as a Homebrew formula, so that mac users can conveniently install and enjoy this useful tool. However, the formula needs a test block to ensure whether the binary works. So I think it's better to exit with code 0 when running "gq-client -h".

Thanks!

Ver 1.1.1 || ipv6 problem : "address already in use"

@cbeuw

[root@new_one ~]# ss-server -c /etc/shadowsocks-libev/config.json --plugin gq-server --plugin-opts "gqserver.json"
 2018-03-24 23:12:36 INFO: using tcp fast open
 2018-03-24 23:12:36 INFO: plugin "gq-server" enabled
 2018-03-24 23:12:36 INFO: initializing ciphers... aes-256-gcm
 2018-03-24 23:12:36 INFO: tcp server listening at 127.0.0.1:44443
 2018-03-24 23:12:36 INFO: running from root user
2018/03/24 23:12:36 Listening on 0.0.0.0:443
2018/03/24 23:12:36 Listening on [::0]:443
2018/03/24 23:12:36 address already in use
 2018-03-24 23:12:36 ERROR: plugin service exit unexpectedly

something is still wrong with the ipv6 support...

Could anybody help me, please?

hi, how can I install goquiet as a plugin with shadowsocks-libev in mac os? I'm a freshman on mac os and i have installed shadowsocks-libev on mac os, but goquiet installation seems failed when i clicked it. what should i do next? please help me.

ps: I had download "gq-client-darwin-amd64-1.2.2" . Is this a suitable file with mac2019?

Android client

This is awesome, thank you so much!

It seems that the arm binary require root privileges. What needs to happen before we can run it as an integrated plugin with shadowsocks-android?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.