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