码迷,mamicode.com
首页 > 其他好文 > 详细

高性能网络服务器--SO_LINGER选项 会话创建

时间:2014-10-26 21:15:36      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:linux   系统管理员   网络服务器   

SO_LINGER选项用于控制close系统调用在关闭TCP连接时的行为。在默认情况下,当说我们使用close系统调用关闭一个socket时,close立即返回,TCP模块负责把socket对应的TCP发送缓冲区中残留的数据发送给对方。

根据linger结构体中两个变量的不同值,会有三种不同的结果:

1、l_onoff==0 ,此时SO_LINGER选项不起作用,close用默认行为来关闭socket.

2、l_onoff != 0 && l_linger==0。此时close的行为取决于两个条件,一是被关闭的socket对应的TCP发送缓冲区中是否存在数据,二是该socket是阻塞还是非阻塞的。对于阻塞socket,close将等待一段l_linger的时间,直到TCP模块发送完所有残留数据并得到对方的确认,如果这段时间内TCP模块没有发送完残留数据并得到对方的确认,那么close系统调用将返回-1并设置errno为EWOULDBLOCK.如果socket是非阻塞的,close将立即返回,此时我们需要根据其返回值和errno来判断残留数据是否已经发送完毕。

二、 会话创建相关的API

      一些有关联的进程组将形成一个会话,下面的函数用于创建一个会话:

      #include <unistd.h>

       pid_t setsid(void);

      该函数不能有进程组的首领进程调用,否则将产生一个错误,对于非组首领的进程,调用该函数不仅创建新会话,而且如下额外的效果:

    1、调用进程成为会话的首领,此时该进程是新会话的唯一成员

     2、新建一个进程组,其PGID就是调用进程的PID,调用进程成为该组的首领

    3、调用进程将甩开终端。

高性能网络服务器--SO_LINGER选项 会话创建

标签:linux   系统管理员   网络服务器   

原文地址:http://blog.csdn.net/yusiguyuan/article/details/40480349

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!