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

本文是关于Unix网络编程的学习笔记,主要探讨Chapter 6的内容,涉及fd_set结构体的使用、套接字阻塞概念、读写操作、套接字处理逻辑、getrlimit和setrlimit函数的应用以及shutdown与close的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
服务器程序会停止运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值