1. 半开放socket
socket是双向的-----socket的两端都可以进行读或写。有的时候我们需要仅仅在一个方向上传输数据,这时候就用到了半开放socket。半开放socket可以用于以下情况:
- 确保所有的数据都已经被传输完毕。
- 捕获潜在的程序错误,这些错误是由于读了不能读的socket,或者写了不能写的socket。
- 您的程序使用了fork()或多线程,而您想防止其他进程或线程进行读写操作,或者想立刻关闭一个socket。
socket.shutdown()可以解决上面的问题。
当使用fork()或多线程时,还会产生一种情况。当调用socket.close()时,只会关闭当前进程的socket。只有当所有的进程都关闭了socket,或者socket超过了范围,或者socket被删除或终止,该连接才会被真正关闭。当与远程机器的通信结束时,可以调用shutdown来关闭socket。
shutdown关闭socket有三种使用方式:
- 0 表示禁止将来读。
- 1 表示禁止将来写。
- 2 表示禁止将来读写。
shutdown是累计的,先设置0,再设置1,会将socket设置为禁止将来读写,与设置为2是一样的。
5.2 超时