阻塞SOCKET与非阻塞SOCKET收发数据代码的差异
阻塞socket
1. 读数据
ret = read(socket, buffer, buffer_size)
read一直阻塞,直到:
(1) 读到数据(数据是否完整?大小是否等于buffer_size)
(2) 超时
2. 写数据
ret = write(socket, buffer, write_size)
write一直阻塞,直到:
(1) 写完write_size数据
(2) 超时(已写数据怎么处理?)
非阻塞socket
1. 读数据
while (非完整业务包) { ret = read(socket, buffer, buffer_size) …… }
read会立即返回,有两种可能:
(1) 读到数据,但数据不一定完整(读到的数据是否一个完整TCP数据包?)
(2) 没有数据或出错
2. 写数据
while (数据没写完) { ret = write(socket, buffer, buffer_size) …… }
write会立即返回,有两种可能:
(1) 写出数据,但不一定全部写完(写出多少数据与什么有关?)
(2) 暂时不能写或出错