- 论坛徽章:
- 7
|
本帖最后由 cxytz01 于 2012-11-30 14:45 编辑
没人回答,那我来总结下我的理解
链接方式一:
同步链接,所有fd创建之后都是同步链接,不必设置
链接方式二:
异步链接,1)int as = 1;
pid_t pid = getpid();
signal(SIGIO, &input_handler); /* dummy sample; sigaction( ) is better */
ioctl(fd, FIOSETOWN, &pid);
ioctl(fd, FIOASYNC, &as)
或者
2)signal(SIGIO, &input_handler); /* dummy sample; sigaction( ) is better */
fcntl(STDIN_FILENO, F_SETOWN, getpid( ));
oflags = fcntl(STDIN_FILENO, F_GETFL);fcntl(STDIN_FILENO, F_SETFL, oflags | FASYNC);
链接方式三:
长链接,不是很明了,但可以肯定,只要定义一个心跳报文,以一定时间间隔发送给对方,就算的上是长连接。
但不知道setsocktopt 的alive用来做什么用
链接方式四:
短链接,同上,不设置心跳报文,就算得上是端连接
链接方式五:
单工链接,shutdown(fd, SHUT_WR) 关闭写,使之成为读单工
shutdown(fd, SHUT_RD) 关闭读,使之成为写单工
当然,就算不执行上面两个步骤,双工链路,只要你只使用read或write也算得上是单工的作用
链接方式六:
非阻塞链接,1) int nb = 1;
ioctl(s, FIONBIO, &nb);
或
2) fcntl(socket, F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK);
链接方式七:
阻塞链接,所有fd创建之后默认是阻塞链接,不必设置。 |
|