不太清楚socket非堵塞//第一次setsocketopt不已经设置超时了吗?//第二次设置的不也是超时吗?
不太明白socket非堵塞//第一次setsocketopt不已经设置超时了吗?//第二次设置的不也是超时吗???
------解决方案--------------------
android我是不了解,
至于说断网的时候阻塞会是好几十秒,这种问题就看你要用什么策略处理
如果在windows机制下,
假设我们用多线程处理通信程序,
一般来说,除了主线程之外,
至少需要一个socket工作线程,一个数据处理线程,再加一个状态和异常处理线程(控制线程)
控制线程可以根据用户指令,再需要的时候去管退另外两个线程,
有必要的时候就强制关闭另外的线程。
------解决方案--------------------
对,我现在编写程序和你说的差不多,主程序基本上除了负责显示一些需要看的东西外基本都不干其他的,工作是要交给线程处理的。
accept_linger.l_onoff = 1; // (在closesocket()调用,但是还有数据没发送完毕的时候容许逗留)
accept_linger.l_linger = 5; // (容许逗留的时间为0秒)
//设置接受超时
::setsockopt(accept_socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(timeout));
//设置关闭之后马上断开
::setsockopt(accept_socket, SOL_SOCKET, SO_LINGER,(const char*)&accept_linger,sizeof(accept_linger));
//加入到socket_set中
FD_SET(accept_socket,&socket_set);
------解决方案--------------------
android我是不了解,
至于说断网的时候阻塞会是好几十秒,这种问题就看你要用什么策略处理
如果在windows机制下,
假设我们用多线程处理通信程序,
一般来说,除了主线程之外,
至少需要一个socket工作线程,一个数据处理线程,再加一个状态和异常处理线程(控制线程)
控制线程可以根据用户指令,再需要的时候去管退另外两个线程,
有必要的时候就强制关闭另外的线程。
------解决方案--------------------
对,我现在编写程序和你说的差不多,主程序基本上除了负责显示一些需要看的东西外基本都不干其他的,工作是要交给线程处理的。