Python網絡編程——修改套接字發送和接收的緩沖區大小


很多情況下,默認的套接字緩沖區大小可能不夠用。此時,可以將默認的套接字緩沖區大小改成一個更合適的值。

1. 代碼

 1 # ! /usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 
 4 import socket
 5 
 6 # 設置發送緩沖域大小
 7 SEND_BUF_SIZE = 4096
 8 # 設置接收緩沖域大小
 9 RECV_BUF_SIZE = 4096
10 
11 
12 def modify_buff_size():
13     # 創建TCP socket
14     # UDP socket —— s=socket.socket(socket.AF_INET,SOCK_DGRAM)
15     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
16 
17     # 獲取當前套接字關聯的選項
18     # socket.SOL_SOCKET —— 正在使用的socket選項
19     # socket.SO_SNDBUF —— 發送緩沖區大小
20     bsize = sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)
21     #打印更改前的發送緩沖區大小
22     print("Buffer size [Before]: %d" % bsize)
23 
24     # 設置TCP套接字關聯的選項
25     # socket.TCP_NODELAY TCP層套接口選項
26     # 1 —— 表示將TCP_NODELAY標記為TRUE
27     sock.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
28 
29     # 設置發送緩沖域套接字關聯的選項
30     sock.setsockopt(
31         socket.SOL_SOCKET,
32         socket.SO_SNDBUF,
33         SEND_BUF_SIZE)
34 
35     # 設置接收緩沖域套接字關聯的選項
36     sock.setsockopt(
37         socket.SOL_SOCKET,
38         socket.SO_RCVBUF,
39         RECV_BUF_SIZE)
40 
41     # 獲取設置后的發送緩沖域
42     bsize = sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)
43     print("Buffer size [After] : %d" % bsize)
44 
45 if __name__ == '__main__':
46     modify_buff_size()

2.setsockopt()和getsockopt()

 1 def setsockopt(self, level, option, value):  # real signature unknown; restored from __doc__
 2     """
 3     setsockopt(level, option, value)
 4 
 5     Set a socket option.  See the Unix manual for level and option.
 6     The value argument can either be an integer or a string.
 7     """
 8     pass
 9 
10 def getsockopt(self, level, option, buffersize=None):  # real signature unknown; restored from __doc__
11     """
12     getsockopt(level, option[, buffersize]) -> value
13 
14     Get a socket option.  See the Unix manual for level and option.
15     If a nonzero buffersize argument is given, the return value is a
16     string of that length; otherwise it is an integer.
17     """
18     pass
19 后續添加解釋

3.AF_INET和SOCK_STREAM解釋

1 socket.AF_INET —— 服務器之間網絡通信
2 socket.SOCK_STREAM提供有序的、可靠的、雙向的和基於連接的字節流,使用帶外數據傳送機制,為Internet地址族使用TCP。
3 SOCK_STREAM類型的套接口為全雙向的字節流。對於流類套接口,在接收或發送數據前必需處於已連接狀 態。用connect()調用建立與另一套接口的連接,連接成功后,即可用send()和recv()傳送數據。當會話結束后,調用closesocket()。帶外數據根據規定用send()和recv()來接收。

4.運行結果

1 Buffer size [Before]: 65536
2 Buffer size [After] : 4096

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM