Unix网络编程学习笔记课后题(Chapter 6)

6.1 在/usr/include/x86_64-linux-gnu/sys/select.h中查看fd_set的定义

/* fd_set for select and pselect.  */
typedef struct
  {
    /* XPG4.2 requires this member name.  Otherwise avoid the name
       from the global namespace.  */
#ifdef __USE_XOPEN
    __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
# define __FDS_BITS(set) ((set)->fds_bits)
#else
    __fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
# define __FDS_BITS(set) ((set)->__fds_bits)
#endif
  } fd_set;

在c语言中,结构体是可以直接使用等号进行赋值的。

6.2
还没讲过套接字阻塞的概念,看了下答案,大概是:
如果要写的大小大于缓冲区,且套接字是阻塞的,则将会阻塞直到写操作完成。

6.3
加上else以后,如果sockfd和fd都是可读的,处理完套接字就不会处理后面的可读缓冲区了。

6.4
加上下面的代码

include        <sys/resource.h>
...
        struct rlimit           limit;

        bzero(&limit,sizeof(limit));
        if(getrlimit(RLIMIT_NOFILE,&limit)<0)
                printf("error getting maxfile.\n");
        else{
                printf("soft limit: %lu, hard limit: %lu\n",limit.rlim_cur,limit.rlim_max);
                limit.rlim_cur=limit.rlim_max;
                if(setrlimit(RLIMIT_NOFILE,&limit)<0){
                        printf("set error\n");
                }
                if(getrlimit(RLIMIT_NOFILE,&limit)<0)
                        printf("error getting maxfile.\n");
                else{
                        printf("soft limit: %lu, hard limit: %lu\n",limit.rlim_cur,limit.rlim_max);
                }
        }

...

运行结果:
在这里插入图片描述
参考:进程环境之getrlimit和setrlimit函数

6.6
shutdown立即发送FIN,而close只有引用计数为0的时候才发送

6.7 不懂,mark
服务器程序会停止运行

猜你喜欢

转载自blog.csdn.net/Ethan95/article/details/84955296