《Linux开发环境及应用》第15周单元测验答案
1. 下面与socket相关的系统调用,哪个会导致当前进程进入阻塞状态?
listen |
---|
connect |
accept |
bind |
答案:B、C
2. accept返回一个新的文件描述符以代表新到达的TCP连接,而不是利用accept之前创建的socket来操纵所有tcp连接,这样同时有n个连接,则整个系统中至少需要n+1个文件描述符。在UDP通信中可以不这样复杂,服务端只用一个socket就可以同时与多个客户端通信
√ |
---|
× |
答案:√
3. 客户端/服务器编程模式,服务器端在同时处理多个呼入TCP连接的多进程并发方案中,每当一个TCP连接到达,将创建一个子进程,父子进程独立运行。如果父进程对于子进程如何处理这个TCP连接丝毫不感兴趣,那么,创建子进程前执行signal(SIGCLD, SIG_IGN); 创建子进程后,父子进程各自独立运行,父子进程可以不发生任何联系。
√ |
---|
× |
答案:√
4. 从socket接收数据,执行ret = read(sock, buf, sizeof buf);会导致当前进程阻塞。线路长时间持续发生故障导致无法接收到数据或者是线路正常但发送方长时间持续没有数据发送,都会导致进程持续停留在阻塞状态。应用程序无法区分这两种情况。
√ |
---|
× |
答案:×
5.对一个TCP连接socket执行ret= write(sock, buf, len); 函数返回值ret等于len,说明系统调用执行成功。系统调用若执行失败,write会返回-1,errno记录了系统调用失败的原因。由于TCP提供了可靠的面向连接的字节流传送服务,所以,ret>0标志系统调用执行成功,可断定这len个字节数据已经成功发送到接收端计算机。
√ |
---|
× |
答案:×
6.select的最后一个参数是struct timeval结构体指针定义的超时时间,时间精度可以指定到微秒级。在这个指定的时间内没有发生任何前面文件描述符集合参数指定的事件之一,进程将从select阻塞态解除。如果指定这个时间间隔值为0,select将一直阻塞,直到至少前面集合参数指定的事件之一发生。
√ |
---|
× |
答案:×
7.shutdown调用可以选择关闭发送或者接收方向的单向连接。TCP提供全双工连接,协议提供了“优雅的”方式分别关闭两个单向连接,利用shutdown系统调用,可以自由选择只关闭本地到远端的单向TCP连接,或者只关闭自远端到本地的另一个单向TCP连接,以允许TCP长时间只有一个单向连接进行通信。
√ |
---|
× |
答案:×
8.对于UDP的socket来说,connect调用不会导致进程进入阻塞状态,由于UDP不是面向连接的协议,所以这一调用毫无意义。
√ |
---|
× |
答案:×
9.socket的bind调用只用在服务端socket,对客户端socket来说,没有意义。
√ |
---|
× |
答案:×