日期:2014-05-16  浏览次数:20661 次

setsockopt设置了linger选项的疑问
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才对的阿?


------解决方案--------------------
探讨

这样呢,select会不会被打断?
kill(SIGIO);
select(...);

------解决方案--------------------
探讨
引用:

引用:
C/C++ code


int main()
{
int sockfd, connfd;
struct sockaddr_in servaddr;
socklen_t len;
struct linger linger;

if (bind(sockfd, (struct sockaddr*……