首页 文章

为什么socketock接受函数不会在closesock调用后释放?

提问于
浏览
4

我有一个服务器应用程序,它打开一个套接字并监听连接 . 在应用程序中,我有一个单独的线程,它创建一个套接字,绑定它并调用它上面的listen和accept函数 .

当应用程序关闭时,我在创建的套接字上调用closesocket,然后等待套接字线程关闭 . 但是,如果线程正在等待accept函数,则线程永远不会完成 .

我认为在调用cloasesocket之后,accept函数会返回 . 这是正确的想法吗?如果是这样,为什么accept函数不返回?还有另一种方法可以使accept函数返回吗?

3 回答

  • 4

    除非 select 说没关系,否则不要拨打 accept . 在那种情况下 accept 永远不会阻止 .

  • 0

    查看手册页... http://linux.die.net/man/2/accept

    套接字A上的 accept() 块,当有新连接进入时,返回一个新的套接字B来连接客户端 . 这通常是一个紧密循环,fork()和exec()将新连接发送到子进程以处理连接,而父进程返回到accept()以等待另一个连接 .

    你试图说你的程序中的另一个线程从accept()调用下关闭套接字A?

  • 0

    我看到一个类似的问题,其中 WSAStartupWSACleanup 的调用不 balancer .

    程序在调用 closesocket 调用之前调用 WSACleanup . 试图关闭套接字的线程都会阻塞 . 当我删除'extra' WSACleanup 的东西改进了 .

    在其他地方,它说调用 WSACleanup 将释放对 accept 的调用,但是我确实是错误的......如果你不能匹配那些启动和清理功能,谁知道还有什么问题 .

相关问题