SetSockOpt不能设置SO_SNDTIMEO, SO_RCVTIMEO ,设置超时,只能设置SOCKET对象,不能设置CSocket对象: Berkeley Software Distribution (BSD) options not supported for SetSockOpt are:Value Type Meaning SO_ACCEPTCONN BOOL Socket is listening SO_ERROR int Get error status and clear. SO_RCVLOWAT int Receive low water . SO_RCVTIMEO int Receive timeout SO_SNDLOWAT int Send low water . SO_SNDTIMEO int Send timeout.
1、你这么长篇大论最好用一下代码那个功能,要不真没法看;
2、AfxSocketInit 一个程序用一次就行;
3、两个解决方法,一个是准备一个event,在线程退出后signal,stop里一直等到这个event再返回,保证每次都安全退出;二是修改线程为线程池,新建时候如果有可用的就不真的新建。
while(1)
{
if(m_flag)
{
socket.send(txbuf,3);
socket.recevie(rxbuf,255);
}
else
{
return 0;
}
}
要让函数返回,只需要设置m_flag等于false就可以,但是如果socket阻塞在接收的时候,这个时候设置m_flag也是没有用的,一定要等recevie返回后,才能跳出while(1).
1 阻塞模式(你正在用的): 设置send、receive的timeout;
2 非阻塞模式: 用select,select里设置timeout;
设置socket的SO_SNDTIMEO, SO_RCVTIMEO
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740532%28v=vs.85%29.aspx
Berkeley Software Distribution (BSD) options not supported for SetSockOpt are:Value Type Meaning
SO_ACCEPTCONN BOOL Socket is listening
SO_ERROR int Get error status and clear.
SO_RCVLOWAT int Receive low water .
SO_RCVTIMEO int Receive timeout
SO_SNDLOWAT int Send low water .
SO_SNDTIMEO int Send timeout.