当前位置: 技术问答>linux和unix
非阻塞方式socket中, 去读select返回的sockfd是否一定是非0值??如果读到的字节数比期望少有没有什么好的处理模式??
来源: 互联网 发布时间:2016-01-28
本文导语: 非阻塞方式socket中, 去读select返回的sockfd是否一定是非0值??如果读到的字节数比期望少有没有什么好的处理模式?? 1.非阻塞方式socket中, 如果去读select返回的sockfd返回是0, 是否一定代表对 方关闭关闭了tcp连接?? 2....
非阻塞方式socket中, 去读select返回的sockfd是否一定是非0值??如果读到的字节数比期望少有没有什么好的处理模式??
1.非阻塞方式socket中, 如果去读select返回的sockfd返回是0, 是否一定代表对
方关闭关闭了tcp连接??
2.如果读到的字节数比期望少有没有什么好的处理模式?? 难道对每一个客户端
socket都开一个缓冲区? 直到读完指定字节数后再去对此客户端做处理?
1.非阻塞方式socket中, 如果去读select返回的sockfd返回是0, 是否一定代表对
方关闭关闭了tcp连接??
2.如果读到的字节数比期望少有没有什么好的处理模式?? 难道对每一个客户端
socket都开一个缓冲区? 直到读完指定字节数后再去对此客户端做处理?
|
1 : see http://post.baidu.com/f?kz=94875093
|
1, yes
2, buffer
对于第二个问题,除了缓存起来,别无它发。要么用阻塞模式,你不做就得kernel做,活儿总的有人干。
2, buffer
对于第二个问题,除了缓存起来,别无它发。要么用阻塞模式,你不做就得kernel做,活儿总的有人干。
|
tcp情况下,读sockfd后返回0,表示对方关闭连接,收到FIN
|
2 ssize_t /* Read "n" bytes from a descriptor. */
3 readn(int fd, void *vptr, size_t n)
4 {
5 size_t nleft;
6 ssize_t nread;
7 char *ptr;
8 ptr = vptr;
9 nleft = n;
10 while (nleft > 0) {
11 if ( (nread = read(fd, ptr, nleft)) = 0 */
22 }
2 ssize_t /* Write "n" bytes to a descriptor. */
3 writen(int fd, const void *vptr, size_t n)
4 {
5 size_t nleft;
6 ssize_t nwritten;
7 const char *ptr;
8 ptr = vptr;
9 nleft = n;
10 while (nleft > 0) {
11 if ( (nwritten = write(fd, ptr, nleft))
3 readn(int fd, void *vptr, size_t n)
4 {
5 size_t nleft;
6 ssize_t nread;
7 char *ptr;
8 ptr = vptr;
9 nleft = n;
10 while (nleft > 0) {
11 if ( (nread = read(fd, ptr, nleft)) = 0 */
22 }
2 ssize_t /* Write "n" bytes to a descriptor. */
3 writen(int fd, const void *vptr, size_t n)
4 {
5 size_t nleft;
6 ssize_t nwritten;
7 const char *ptr;
8 ptr = vptr;
9 nleft = n;
10 while (nleft > 0) {
11 if ( (nwritten = write(fd, ptr, nleft))
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!