阻塞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) 暂时不能写或出错

posted @ 2015-11-08 18:41  lych2e  阅读(128)  评论(0编辑  收藏  举报