多个客户端连接到服务器端后,当一定时间内某一个客户端没有与服务器端进行通讯,那么服务器端就关闭掉与该客户端连接的socket.
我用的是closesocket()函数,但是我发现程序运行一段时间后,就死掉了(程序死掉了),只有强行关闭服务器端的程序,重新启动改程序。
经过查阅资料,发现在关闭socket之前,要使用setsockopt()函数。
测试:当某一个socket关闭后,系统重新分配socket,但发现socket值一不断增加,我怀疑前面的socket资源并没有完全释放?
哪位有这方面的经验,能否给予解释一下,谢谢!

解决方案 »

  1.   

    closesocket 就可以了你程序的错误在其他地方。
      

  2.   

    楼主还在这个问题上纠结啊??你的程序运行一段时间后死掉,肯定是你的代码设计上有问题,与closesocket()没关系的。不要把精力放到怀疑closesocket没释放SOCKET上来,你在CSDN上都问了3次了,要是closesocket真的会有不能释放SOCKET而导致程序死掉的问题,那早就会有人告诉你了。
    关闭SOCKET只需要closesocket就行了,不需要setsockopt,你要是还在怀疑SOCKET一直在增加,增加到你程序死掉的话,你可以这样做个测试,循环用socket/WSASocket创建N多SOCKET,看看你的程序会不会死掉。你还不放心的话可以去找找开源的网络程序来看看。
      

  3.   

    程序死掉,应当是代码问题,你说的死掉,请先排除你用了阻塞模式的socket.
      

  4.   

    因为一直找不的出错的原因,所以就在此提问.定义一个存放socket的结构体变量
    typedef struct {
        unsigned int   sockid;        
    }SA_SOCKET; 
     
    SA_SOCKET SA_SOCKETS[10];如果关闭某一个socket的话,我是就采用下面的方法。
    closesocket(SA_SOCKETS[i].sockid);
    这样的做法对吗?
      

  5.   

    对于SA_SOCKETS数组变量,我是这样赋值的:
     connected_skt=accept(skt,(struct sockaddr *)&clientaddr,&Len);
     SA_SOCKETS[i]= connected_skt
     i++;
      

  6.   

    .....晕!!!!!
    肯定是数组问题,最好换成list