概述
connect:连接到远程主机。
返回的结果有:
1.不可达。
2.拒绝连接。
3.超时。
4.成功。
read:从内核缓冲区读取数据。如果内核缓冲区没有内容,则一直阻塞。
返回的结果有:
1.已填满单次read申请的的字节数。 n = ncount
2.未填满read申请的字节,但是内核缓冲区已经没有内容。 0 < n < ncount
3.EOF n = 0
4.被信号所中断. (-1 && errno == EINTER)
5.错误. -1 && errno != EINTER
write:将内容写到远程主机内核缓冲区,成功后返回。
返回的结果有:
1.所有内容成功写入远程主机内核缓冲区。 n = ncount
2.部分内容写进远程主机内核缓冲区,远程内核缓冲区满了。0 < n < ncount
3 被信号中断
4 错误。
---------------------------------------------------------
write的问题, write成功返回, 不代表远程主机的进程读到数据。仅存在其内核缓冲区中,其进程要调用 read()去读取数据。有实验证明:
实验1:
服务端,客户端 均调用 read(connfd, &ch, 1);//两者内核缓冲区都没内容,两者都阻塞。
实验2:
服务端,客户端 均调用 write(connfd, &ch, 1);//两者都成功返回1, 尽管双方都没有调用read(), write也会成功返回。
2014.01.20总结,可能会有不对~~~ 先记录在此吧。 写程序中,一端没有read函数,一端wirte直接返回了,我还以为自己程序出问题了~~
最后附个 man write的信息。
POSIX requires that a read() which can be proved to occur after awrite() has returned returns the new data
最后
以上就是拉长花卷为你收集整理的阻塞socket中 read,write,connect的小总结的全部内容,希望文章能够帮你解决阻塞socket中 read,write,connect的小总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复