TCP套接字的可用rcvBuf的大小就是TCP通告另一端的窗口大小(滑动窗口),由TCP的流量限制措施决定rcvBuf不会溢出;而UDP套接字rcvBuf没有流量限制,因此发送的数据报大小一旦超出rcvBuf的限制,则会被丢弃。
阻塞与非阻塞
这取决于用在哪些方面。如果是重要的数据,最好阻塞接收,否则非阻塞,以提高利用率。为了保证数据安全,通常也用阻塞发送。
一般而言,为了数据安全,可靠,用阻塞操作。 而一些特殊场合,而需要轮询时则采用非阻塞操作。
备注:
MTU: Maxitum Transmission Unit 最大传输单元
网络
|
MTU字节
|
超通道
|
65535
|
16Mb/s令版环(IBM)
|
17914
|
4Mb/s令版环(IEEE 802.5)
|
4464
|
FDDI
|
4352
|
以太网
|
1500
|
IEEE 802.2/802.3
|
1492
|
X25
|
576
|
点对点(低时延)
|
296
|
下表是用getsockopt获取到的linux平台下socket默认值:(见下表)
sockfd
|
level(
属性分层)
|
name(
属性类型)
|
value
(属性参数),SOCK_STREAM
|
value
(属性参数),SOCK_DGRAM
|
optlen(
属性内存块长度)
|
|
SOL_SOCKET
|
|
|
|
|
|
|
SO
_KEEPALIVE
|
0(tcp:2h)
|
0
|
sizeof(int)=4
|
|
|
SO
_LINGER
|
|
|
struct linger
|
|
|
SO
_RVVBUF
|
87380
|
110592
|
4
|
|
|
SO
_SNDBUF
|
16384
|
110592
|
4
|
|
|
SO
_RCVLOWAT
|
1
|
1
|
4
|
|
|
SO
_SNDLOWAT
|
1
|
1
|
4
|
|
|
SO
_RCVTIMEO
|
0
|
0
|
struct timeval
|
|
|
SO
_SNDTIMEO
|
0
|
0
|
struct timeval
|
|
|
SO
_REUSEADDR
|
0
|
0
|
4
|
|
|
SO_TYPE
|
1(SOCK_STREAM)
|
2(SOCK_DGRAM)
|
4
|
|
|
|
|
|
|
|
IP_PROTO_TCP
|
|
|
|
|
|
IP_PROTO_IP
|
|
|
|
|
|
|
|
|
|
|