多个客户端连接到服务器端后,当一定时间内某一个客户端没有与服务器端进行通讯,那么服务器端就关闭掉与该客户端连接的socket.
我用的是closesocket()函数,但是我发现程序运行一段时间后,就死掉了(程序死掉了),只有强行关闭服务器端的程序,重新启动改程序。
经过查阅资料,发现在关闭socket之前,要使用setsockopt()函数。
测试:当某一个socket关闭后,系统重新分配socket,但发现socket值一不断增加,我怀疑前面的socket资源并没有完全释放?
哪位有这方面的经验,能否给予解释一下,谢谢!
我用的是closesocket()函数,但是我发现程序运行一段时间后,就死掉了(程序死掉了),只有强行关闭服务器端的程序,重新启动改程序。
经过查阅资料,发现在关闭socket之前,要使用setsockopt()函数。
测试:当某一个socket关闭后,系统重新分配socket,但发现socket值一不断增加,我怀疑前面的socket资源并没有完全释放?
哪位有这方面的经验,能否给予解释一下,谢谢!
关闭SOCKET只需要closesocket就行了,不需要setsockopt,你要是还在怀疑SOCKET一直在增加,增加到你程序死掉的话,你可以这样做个测试,循环用socket/WSASocket创建N多SOCKET,看看你的程序会不会死掉。你还不放心的话可以去找找开源的网络程序来看看。
typedef struct {
unsigned int sockid;
}SA_SOCKET;
SA_SOCKET SA_SOCKETS[10];如果关闭某一个socket的话,我是就采用下面的方法。
closesocket(SA_SOCKETS[i].sockid);
这样的做法对吗?
connected_skt=accept(skt,(struct sockaddr *)&clientaddr,&Len);
SA_SOCKETS[i]= connected_skt
i++;
肯定是数组问题,最好换成list