+ -
当前位置:首页 → 问答吧 → setsockopt设置了linger选项的疑问

setsockopt设置了linger选项的疑问

时间:2011-12-05

来源:互联网

C/C++ code

int main()
{
    int sockfd, connfd;
    struct sockaddr_in servaddr;
    socklen_t len;
    struct linger linger;
    
    if (bind(sockfd, (struct sockaddr*)&servaddr, sizeof servaddr) < 0)
        err_sys("bind error");
    if (listen(sockfd, LISTENQ) < 0)
        err_sys("listen error");
    linger.l_onoff = 1;
    linger.l_linger = 0;
    if (setsockopt(sockfd, SOL_SOCKET, SO_LINGER, &linger, len) < 0)
        err_sys("error setlinger\n");
    connfd = accept(sockfd, (struct sockaddr*)&servaddr, &len);
    close(connfd);
    close(sockfd);
    return 0;
}


这段代码用setsockopt设置了linger选项,l_onoff为1,l_linger为0,但是我用netstat看到这个进程还是经历了TIME_WAIT状态,设置了此选项应该不会经历这个state才对的阿?

作者: xiaofen8   发布时间: 2011-12-05

按道理说是,但天知道为什么不是,毕竟这是TCP协议的事,可能没有统一这个问题的标准。

作者: qq120848369   发布时间: 2011-12-05

不过你的len没有赋值啊。

作者: qq120848369   发布时间: 2011-12-05

你也做了测试结果和我一样?len赋不赋值都没关系吧

作者: xiaofen8   发布时间: 2011-12-05

引用 3 楼 xiaofen8 的回复:

你也做了测试结果和我一样?len赋不赋值都没关系吧


如果栈上变量len的随机值>=sizeof(struct linger)的话就不用设置, 这是C语言问题, 不解释啊.

我没试验啊, 太麻烦了.

作者: qq120848369   发布时间: 2011-12-05