VC++服务器程序,怎样在两个线程中同时使用一个套接字

VC++服务器程序,怎样在两个线程中同时使用一个套接字?请教大家
我用MFC建了一个基于对话框的程序。我要编一个服务器端程序,服务器端套接字和客户端套接字(SOCKET c_sockConn; )是定义在一个communication类里面的。把建立套接字、绑定、侦听、及accpet()做成一个函数在OnInitDialog()函数中调用。因为编写的是一个集中器程序,服务器和套接字连上了后,还要等待心跳帧并且应答后,才能发送命令。所以想建两个线程,一个线程是专门应答心跳帧的(接收心跳帧报文并发送相应的报文),让集中器在线叫做线程1。另一个线程,是用来发送和接收通信报文的,叫作线程2。两个线程都是在communication类中声明的友元函数。我在OnInitDialog()函数中调用专门应答心跳帧的线程,叫做线程;新建一个按钮button1调用一个线程2。两个线程同时调用套接字c_sockConn,可是为什么在线程1中套接字是正常的,而线程2中的套接字是 3435973836,发送和接收报文都不行,接收的报文长度为-1。请问:这是为什么?c_sockConn是一个类中的全局变量呀,怎样才能在线程2中使用,在OnInitDialog()函数中建好的c_sockConn?请教各位高手,谢谢!

------解决方案--------------------
通过一个单件类的接口访问。
------解决方案--------------------
同步socket
------解决方案--------------------
锁定SOCKET缓冲区,给你段代码吧。
EnterCriticalSection(&pdlg->Section_work[pthreadarg->i]);
send(pdlg->m_data_pack[pthreadarg->i].GetHead().sockinfo.sock,(char*) 
(&my_data.packhead),sizeof(my_data.packhead),0);
LeaveCriticalSection(&pdlg->Section_work[pthreadarg->i]);

------解决方案--------------------
如果不能安全跨线程操作,就在使用前上锁,用完解锁
------解决方案--------------------
就是避免多线程同时操作sock.
一般send_thread recv_thread. accept_thread
------解决方案--------------------
你创建线程2的时候,可以将SOCKET套接字句柄作为线程函数的参数传递进入即可。
------解决方案--------------------
怎么不给分啊?
------解决方案--------------------
将socket句柄当做线程堆栈参数传递到线程中去,或者找个socket管理类,然后想法吧找个socket管理类放进去,通过这个类可以收发数据,以及心跳的处理,断线。