linux read()和write

参考http://www.cnblogs.com/xiehongfeng100/p/4619451.html

1. read总是在接收缓冲区有数据时立即返回,而不是等到给定的read buffer填满时返回。

  只有当receive buffer为空时,blocking模式才会等待,而nonblock模式下会立即返回-1(errno = EAGAIN或EWOULDBLOCK)

  注:阻塞模式下,当对方socket关闭时,read会返回0。

2. blocking的write只有在缓冲区足以放下整个buffer时才返回(与blocking read并不相同)

  nonblock write则是返回能够放下的字节数,之后调用则返回-1(errno = EAGAIN或EWOULDBLOCK)

  对于blocking的write有个特例:当write正阻塞等待时对面关闭了socket,则write则会立即将剩余缓冲区填满并返回所写的字节数,再次调用则write失败(connection reset by peer)

posted @ 2018-05-11 16:37  莘莘学子  阅读(378)  评论(0编辑  收藏  举报