Переглянути джерело

Set buffer sizes to sockets

tags/0.9
9seconds 7 роки тому
джерело
коміт
fb00cd1121
3 змінених файлів з 29 додано та 23 видалено
  1. 14
    3
      client/direct.go
  2. 0
    17
      config/config.go
  3. 15
    3
      telegram/dialer.go

+ 14
- 3
client/direct.go Переглянути файл

@@ -12,11 +12,22 @@ import (
12 12
 	"github.com/9seconds/mtg/wrappers"
13 13
 )
14 14
 
15
-const handshakeTimeout = 10 * time.Second
15
+const (
16
+	handshakeTimeout = 10 * time.Second
17
+	readBufferSize   = 64 * 1024
18
+	writeBufferSize  = 64 * 1024
19
+)
16 20
 
17 21
 func DirectInit(socket net.Conn, connID string, conf *config.Config) (wrappers.Wrap, *mtproto.ConnectionOpts, error) {
18
-	if err := config.SetSocketOptions(socket); err != nil {
19
-		return nil, nil, errors.Annotate(err, "Cannot set socket options")
22
+	tcpSocket := socket.(*net.TCPConn)
23
+	if err := tcpSocket.SetNoDelay(false); err != nil {
24
+		return nil, nil, errors.Annotate(err, "Cannot disable NO_DELAY to client socket")
25
+	}
26
+	if err := tcpSocket.SetReadBuffer(readBufferSize); err != nil {
27
+		return nil, nil, errors.Annotate(err, "Cannot set read buffer size of client socket")
28
+	}
29
+	if err := tcpSocket.SetWriteBuffer(writeBufferSize); err != nil {
30
+		return nil, nil, errors.Annotate(err, "Cannot set write buffer size of client socket")
20 31
 	}
21 32
 
22 33
 	socket.SetReadDeadline(time.Now().Add(handshakeTimeout))

+ 0
- 17
config/config.go Переглянути файл

@@ -149,20 +149,3 @@ func NewConfig(debug, verbose bool, // nolint: gocyclo
149 149
 
150 150
 	return conf, nil
151 151
 }
152
-
153
-// SetSocketOptions makes socket keepalive, sets buffer sizes
154
-func SetSocketOptions(conn net.Conn) error {
155
-	socket := conn.(*net.TCPConn)
156
-
157
-	if err := socket.SetReadBuffer(BufferReadSize); err != nil {
158
-		return errors.Annotate(err, "Cannot set read buffer size")
159
-	}
160
-	if err := socket.SetWriteBuffer(BufferWriteSize); err != nil {
161
-		return errors.Annotate(err, "Cannot set write buffer size")
162
-	}
163
-	if err := socket.SetNoDelay(true); err != nil {
164
-		return errors.Annotate(err, "Cannot activate nodelay for the socket")
165
-	}
166
-
167
-	return nil
168
-}

+ 15
- 3
telegram/dialer.go Переглянути файл

@@ -10,7 +10,11 @@ import (
10 10
 	"github.com/9seconds/mtg/wrappers"
11 11
 )
12 12
 
13
-const telegramDialTimeout = 10 * time.Second
13
+const (
14
+	telegramDialTimeout = 10 * time.Second
15
+	readBufferSize      = 64 * 1024
16
+	writeBufferSize     = 64 * 1024
17
+)
14 18
 
15 19
 type tgDialer struct {
16 20
 	net.Dialer
@@ -23,8 +27,16 @@ func (t *tgDialer) dial(addr string) (net.Conn, error) {
23 27
 	if err != nil {
24 28
 		return nil, errors.Annotate(err, "Cannot connect to Telegram")
25 29
 	}
26
-	if err = config.SetSocketOptions(conn); err != nil {
27
-		return nil, errors.Annotate(err, "Cannot set socket options")
30
+
31
+	tcpSocket := conn.(*net.TCPConn)
32
+	if err = tcpSocket.SetNoDelay(true); err != nil {
33
+		return nil, errors.Annotate(err, "Cannot set NO_DELAY to Telegram")
34
+	}
35
+	if err = tcpSocket.SetReadBuffer(readBufferSize); err != nil {
36
+		return nil, errors.Annotate(err, "Cannot set read buffer size on telegram socket")
37
+	}
38
+	if err = tcpSocket.SetWriteBuffer(writeBufferSize); err != nil {
39
+		return nil, errors.Annotate(err, "Cannot set write buffer size on telegram socket")
28 40
 	}
29 41
 
30 42
 	return conn, nil

Завантаження…
Відмінити
Зберегти