@@多线程程序,某线程中开socket侦听线程,阻塞方式 如何避免主程序结束时线程报错有关问题

@@多线程程序,某线程中开socket侦听线程,阻塞方式 如何处理主程序结束时线程报错问题?
本帖最后由 whiteprincer 于 2012-06-24 23:11:18 编辑
如题
这种方式如何让程序退出时不报错?
如下,若是阻塞方式处理是不是好一些呢?如何处理?

if ((lsn_fd = socket (AF_INET, SOCK_STREAM, 0)) < 0)
{
    ;              
}
/*******绑定*****/
if (bind (lsn_srv_fd, (struct sockaddr *) &st_addr,sizeof (struct sockaddr)) == -1)
{
    ;
}
 /****监听*******/
if (listen (lsn_srv_fd, 10) < 0)
{
    ;
}
while(1)
{            
            /*等待接受客户连接*/
            for(int i = 0;i < 10;i++)
            {

                    if ((fd = accept (lsn_fd, (struct sockaddr *) &str_addr, &socket_len)) < 0)
                    {                        
                        break;
                    }
                    else
                    {
                         ;
                    }  
                   //other function                 
            }           
            Sleep(500);         
}

------解决方案--------------------
关闭之前先closesocket(lsn_fd)应该就行了
------解决方案--------------------
主程序结束时
先关闭socket,再释放所有线程,最后退出。