安卓开发异常 EAGAIN in recvfrom 阻塞,谁碰到过吗

java - Application stop after some time android eclipse - Stack Overflow
to customize your list.
Join the Stack Overflow Community
Stack Overflow is a community of 4.7 million programmers, just like you, helping each other.
J it only takes a minute:
I made a simple application, which just download some data from internet and then process it continuously. But I found that after a half or some time application stops working when screen is turned off. And there is no error on application. It seems like application restarted and every thing normal,just not downloading data. Here is my code.
class RequestTask extends AsyncTask&String, String, String&{
protected String doInBackground(String... url) {
// constants
int timeoutSocket = 5000;
int timeoutConnection = 5000;
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpClient client = new DefaultHttpClient(httpParameters);
System.out.println(GlobalVariables.getRandomString(15));
HttpGet httpget = new HttpGet(url[0] + "?id=" + GlobalVariables.getRandomString(15));
HttpResponse getResponse = client.execute(httpget);
getResponse.addHeader("Cache-Control:", "no-cache");
final int statusCode = getResponse.getStatusLine().getStatusCode();
if(statusCode != HttpStatus.SC_OK) {
Log.w("MyApp", "Download Error: " + statusCode + "| for URL: " + url);
String line = "";
StringBuilder total = new StringBuilder();
HttpEntity getResponseEntity = getResponse.getEntity();
BufferedReader reader = new BufferedReader(new InputStreamReader(getResponseEntity.getContent()));
while((line = reader.readLine()) != null) {
total.append(line);
total.append("\n");
line = total.toString();
} catch (Exception e) {
Log.w("MyApp", "Download Exception : " + e.toString());
protected void onPreExecute() {
TextView txtstatus = (TextView) findViewById(R.id.txtstatus);
txtstatus.setText("Status: Downloading Data, Please Wait....");
protected void onPostExecute(String result) {
TextView txtstatus = (TextView) findViewById(R.id.txtstatus);
txtstatus.setText("Status: Downloading Complete.");
if(result.toString().length() & 10) {
errorcount = 0;
MyMessageDetails D
String[] mydata = result.split("\\|s\\|");
for (String value : mydata)
if (value.contains("|")){
String[] details = value.split("\\|n\\|");
String mymsg =
Detail = new MyMessageDetails();
Detail.setIcon(R.drawable.ic_launcher);
for (String mydetail : details)
if (mydetail.startsWith("_From:_")){
mymsg = "From: " + mydetail.replace("_From:_", "")+ "\n";
Detail.setMsgBody(mymsg);
titles.add(Detail);
if (titles.size() & 0){
ListView listView1 = (ListView)findViewById(R.id.lstmsgs);
ca = new CustomAdapter(titles , MainActivity.this);
listView1.setAdapter(ca);
if (StartInfo){
new RequestTask().execute(BaseUrl);
if (StartInfo){
new RequestTask().execute(BaseUrl);
} catch(NullPointerException e) {
TextView txtstatus = (TextView) findViewById(R.id.txtstatus);
txtstatus.setText("Status: " + "Error: " + e.getCause());
LogCat look like this.
09-08 22:16:32.650: D/jdwp(9057): sendBufferedRequest : len=0x3F
09-08 22:16:32.713: D/ActivityThread(9057): BIND_APPLICATION handled : 0 / AppBindData{appInfo=ApplicationInfo{417d01d0 com.golden.smsserver}}
09-08 22:16:32.788: D/ThemeManager(9057): contextandroid.app.ContextImpl@417d2460
09-08 22:16:32.788: D/ThemeManager(9057): create ThemeManager object
09-08 22:16:32.789: D/ThemeManager(9057): Res_clear()
09-08 22:16:32.806: D/ThemeManager(9057): packageName=====com.golden.smsserver
09-08 22:16:32.809: D/ThemeManager(9057): packageName=com.golden.smsserver
09-08 22:16:32.810: V/Provider/Setting(9057): invalidate [system]: current 25 != cached 0
09-08 22:16:32.813: D/RRR(9057): path=other/bottom/bottom7.png
09-08 22:16:32.872: D/ThemeManager(9057): sIconWidth=64----sIconHeight=64
09-08 22:16:32.875: D/ThemeManagerHH(9057): infoDrawable=72
09-08 22:16:33.000: D/dalvikvm(9057): threadid=11: interp stack at 0x4c0b0000
09-08 22:16:33.000: D/dalvikvm(9057): threadid=11: calling run()
09-08 22:16:33.007: D/dalvikvm(9057): threadid=11: exiting
09-08 22:16:33.008: D/dalvikvm(9057): threadid=11: bye!
09-08 22:16:33.008: D/dalvikvm(9057): threadid=0: freeing
09-08 22:16:33.009: D/ActivityThread(9057): ACT-AM_ON_RESUME_CALLED ActivityRecord{417d1800 token=android.os.BinderProxy@417d1038 {com.golden.smsserver/com.golden.smsserver.MainActivity}}
09-08 22:16:33.029: D/ActivityThread(9057): ACT-LAUNCH_ACTIVITY handled : 0 / ActivityRecord{417d1800 token=android.os.BinderProxy@417d1038 {com.golden.smsserver/com.golden.smsserver.MainActivity}}
09-08 22:16:33.117: D/libEGL(9057): loaded /system/lib/egl/libGLES_android.so
09-08 22:16:33.126: D/libEGL(9057): loaded /vendor/lib/egl/libEGL_mtk.so
09-08 22:16:33.147: D/libEGL(9057): loaded /vendor/lib/egl/libGLESv1_CM_mtk.so
09-08 22:16:33.156: D/libEGL(9057): loaded /vendor/lib/egl/libGLESv2_mtk.so
09-08 22:16:33.243: D/OpenGLRenderer(9057): Enabling debug mode 0
09-08 22:16:36.226: D/dalvikvm(9057): threadid=11: interp stack at 0x4e02e000
09-08 22:16:36.226: D/dalvikvm(9057): threadid=11: calling run()
09-08 22:16:36.229: I/System.out(9057): ns7iqohduryaote
09-08 22:16:36.317: I/System.out(9057): [socket][0] connection /192.168.10.9:8080;LocalPort=)
09-08 22:16:36.317: I/System.out(9057): [CDS]connect[/192.168.10.9:8080] tm:5
09-08 22:16:36.328: D/Posix(9057): [Posix_connect Debug]Process com.golden.smsserver :8080
09-08 22:16:36.424: I/System.out(9057): [socket][/192.168.104.101:33406]
09-08 22:16:36.425: I/System.out(9057): rx timeout:5000
09-08 22:16:37.273: D/dalvikvm(9057): threadid=12: interp stack at 0x4e082000
09-08 22:16:37.273: D/dalvikvm(9057): threadid=12: calling run()
09-08 22:16:37.273: I/System.out(9057): 6bui5dlvbf445wr
09-08 22:16:37.299: I/System.out(9057): [socket][1] connection /192.168.10.9:8080;LocalPort=)
09-08 22:16:37.300: I/System.out(9057): [CDS]connect[/192.168.10.9:8080] tm:5
09-08 22:16:37.300: D/Posix(9057): [Posix_connect Debug]Process com.golden.smsserver :8080
09-08 22:16:40.457: I/System.out(9057): [socket][/192.168.104.101:34375]
09-08 22:16:40.457: I/System.out(9057): rx timeout:5000
09-08 22:16:41.496: I/System.out(9057): rx timeout:10
09-08 22:16:41.496: I/System.out(9057): rx timeout:5000
09-08 22:16:41.497: I/System.out(9057): rx timeout:10
09-08 22:16:41.497: I/System.out(9057): [CDS]shutdownInput
09-08 22:16:41.497: I/System.out(9057): rx timeout:5000
09-08 22:16:41.497: I/System.out(9057): [CDS]shutdownInput
09-08 22:16:41.499: I/System.out(9057): [CDS]close[34375]
09-08 22:16:41.501: I/System.out(9057): close [socket][/0.0.0.0:34375]
09-08 22:16:41.502: I/System.out(9057): close [socket][/0.0.0.0:34375]
09-08 22:16:41.513: D/dalvikvm(9057): threadid=13: interp stack at 0x4e223000
09-08 22:16:41.513: D/dalvikvm(9057): threadid=13: calling run()
09-08 22:16:41.514: I/System.out(9057): urz5mb57hes3124
09-08 22:16:41.549: I/System.out(9057): [socket][2] connection /192.168.10.9:8080;LocalPort=)
09-08 22:16:41.549: I/System.out(9057): [CDS]connect[/192.168.10.9:8080] tm:5
09-08 22:16:41.550: D/Posix(9057): [Posix_connect Debug]Process com.golden.smsserver :8080
09-08 22:16:41.640: I/System.out(9057): [socket][/192.168.104.101:36147]
09-08 22:16:41.640: I/System.out(9057): rx timeout:5000
09-08 22:16:42.206: I/System.out(9057): rx timeout:10
09-08 22:16:42.210: I/System.out(9057): [CDS]EAGAIN or EWOULDBLOCK in Recvfrom
09-08 22:16:42.210: I/System.out(9057): [CDS]read is 0
09-08 22:16:42.211: I/System.out(9057): rx timeout:5000
09-08 22:16:42.211: I/System.out(9057): rx timeout:10
09-08 22:16:42.219: I/System.out(9057): rx timeout:5000
09-08 22:16:42.219: I/System.out(9057): [CDS]shutdownInput
09-08 22:16:42.219: I/System.out(9057): [CDS]close[36147]
09-08 22:16:42.220: I/System.out(9057): close [socket][/0.0.0.0:36147]
09-08 22:16:42.220: I/System.out(9057): close [socket][/0.0.0.0:36147]
09-08 22:16:42.229: D/dalvikvm(9057): threadid=14: interp stack at 0x4e22b000
09-08 22:16:42.229: D/dalvikvm(9057): threadid=14: calling run()
09-08 22:16:42.230: I/System.out(9057): whm0kske88z9hwr
09-08 22:16:42.233: I/System.out(9057): [socket][3] connection /192.168.10.9:8080;LocalPort=)
09-08 22:16:42.234: I/System.out(9057): [CDS]connect[/192.168.10.9:8080] tm:5
09-08 22:16:42.235: D/Posix(9057): [Posix_connect Debug]Process com.golden.smsserver :8080
09-08 22:16:42.238: I/System.out(9057): [socket][/192.168.104.101:57208]
09-08 22:16:42.238: I/System.out(9057): rx timeout:5000
09-08 22:16:42.759: I/System.out(9057): rx timeout:10
09-08 22:16:42.760: I/System.out(9057): [CDS]EAGAIN or EWOULDBLOCK in Recvfrom
09-08 22:16:42.760: I/System.out(9057): [CDS]read is 0
09-08 22:16:42.760: I/System.out(9057): rx timeout:5000
09-08 22:16:42.760: I/System.out(9057): rx timeout:10
09-08 22:16:42.761: I/System.out(9057): rx timeout:5000
09-08 22:16:42.761: I/System.out(9057): [CDS]shutdownInput
09-08 22:16:42.761: I/System.out(9057): [CDS]close[57208]
09-08 22:16:42.762: I/System.out(9057): close [socket][/0.0.0.0:57208]
09-08 22:16:42.762: I/System.out(9057): close [socket][/0.0.0.0:57208]
09-08 22:16:42.763: D/dalvikvm(9057): threadid=15: interp stack at 0x4e233000
09-08 22:16:42.764: D/dalvikvm(9057): threadid=15: calling run()
09-08 22:16:42.765: I/System.out(9057): 769h9vhnoeafrbi
09-08 22:16:42.768: I/System.out(9057): [socket][4] connection /192.168.10.9:8080;LocalPort=)
09-08 22:16:42.770: I/System.out(9057): [CDS]connect[/192.168.10.9:8080] tm:5
09-08 22:16:42.773: D/Posix(9057): [Posix_connect Debug]Process com.golden.smsserver :8080
09-08 22:16:42.775: I/System.out(9057): [socket][/192.168.104.101:60430]
09-08 22:16:42.775: I/System.out(9057): rx timeout:5000
09-08 22:16:43.335: I/System.out(9057): rx timeout:10
09-08 22:16:43.340: I/System.out(9057): [CDS]EAGAIN or EWOULDBLOCK in Recvfrom
09-08 22:16:43.340: I/System.out(9057): [CDS]read is 0
09-08 22:16:43.341: I/System.out(9057): rx timeout:5000
09-08 22:16:43.341: I/System.out(9057): rx timeout:10
09-08 22:16:43.347: I/System.out(9057): rx timeout:5000
09-08 22:16:43.347: I/System.out(9057): [CDS]shutdownInput
09-08 22:16:43.347: I/System.out(9057): [CDS]close[60430]
09-08 22:16:43.348: I/System.out(9057): close [socket][/0.0.0.0:60430]
09-08 22:16:43.348: I/System.out(9057): close [socket][/0.0.0.0:60430]
09-08 22:16:43.349: I/System.out(9057): 4fmk
09-08 22:16:43.355: I/System.out(9057): [socket][5] connection /192.168.10.9:8080;LocalPort=)
09-08 22:16:43.355: I/System.out(9057): [CDS]connect[/192.168.10.9:8080] tm:5
09-08 22:16:43.356: D/Posix(9057): [Posix_connect Debug]Process com.golden.smsserver :8080
09-08 22:16:43.359: I/System.out(9057): [socket][/192.168.104.101:41743]
09-08 22:16:43.360: I/System.out(9057): rx timeout:5000
09-08 22:16:44.000: I/System.out(9057): rx timeout:10
09-08 22:16:44.010: I/System.out(9057): [CDS]EAGAIN or EWOULDBLOCK in Recvfrom
09-08 22:16:44.010: I/System.out(9057): [CDS]read is 0
09-08 22:16:44.010: I/System.out(9057): rx timeout:5000
09-08 22:16:44.011: I/System.out(9057): rx timeout:10
09-08 22:16:44.012: I/System.out(9057): rx timeout:5000
09-08 22:16:44.012: I/System.out(9057): [CDS]shutdownInput
09-08 22:16:44.012: I/System.out(9057): [CDS]close[41743]
09-08 22:16:44.013: I/System.out(9057): close [socket][/0.0.0.0:41743]
09-08 22:16:44.013: I/System.out(9057): close [socket][/0.0.0.0:41743]
09-08 22:16:44.015: I/System.out(9057): z56eof2knllxpm3
public class MainActivity extends Activity implements android.view.View.OnClickListener{
public boolean StartI
ArrayList&MyMessageDetails& titles = new ArrayList&MyMessageDetails&();
String BaseUrl = My URL
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnsend = (Button) findViewById(R.id.btnsend);
btnsend.setOnClickListener(this);
@SuppressWarnings("deprecation")
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()) {
case R.id.btnsend:
Button btnsend = (Button) findViewById(R.id.btnsend);
EditText etcounter = (EditText) findViewById(R.id.etcounter);
if (StartInfo){
btnsend.setText("Start");
etcounter.setEnabled(true);
StartInfo =
btnsend.setText("Stop");
etcounter.setEnabled(true);
StartInfo =
new RequestTask().execute(BaseUrl);
class RequestTask extends AsyncTask&String, String, String&{
protected String doInBackground(String... url) {
// constants
int timeoutSocket = 5000;
int timeoutConnection = 5000;
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpClient client = new DefaultHttpClient(httpParameters);
System.out.println(GlobalVariables.getRandomString(15));
HttpGet httpget = new HttpGet(url[0] + "?id=" + GlobalVariables.getRandomString(15));
HttpResponse getResponse = client.execute(httpget);
getResponse.addHeader("Cache-Control:", "no-cache");
final int statusCode = getResponse.getStatusLine().getStatusCode();
if(statusCode != HttpStatus.SC_OK) {
Log.w("MyApp", "Download Error: " + statusCode + "| for URL: " + url);
String line = "";
StringBuilder total = new StringBuilder();
HttpEntity getResponseEntity = getResponse.getEntity();
BufferedReader reader = new BufferedReader(new InputStreamReader(getResponseEntity.getContent()));
while((line = reader.readLine()) != null) {
total.append(line);
total.append("\n");
line = total.toString();
} catch (Exception e) {
Log.w("MyApp", "Download Exception : " + e.toString());
protected void onPreExecute() {
TextView txtstatus = (TextView) findViewById(R.id.txtstatus);
txtstatus.setText("Status: Downloading Data, Please Wait....");
protected void onPostExecute(String result) {
TextView txtstatus = (TextView) findViewById(R.id.txtstatus);
txtstatus.setText("Status: Downloading Complete.");
if(result.toString().length() & 10) {
MyMessageDetails D
String[] mydata = result.split("\\|s\\|");
for (String value : mydata)
if (value.contains("|")){
String[] details = value.split("\\|n\\|");
String mymsg =
Detail = new MyMessageDetails();
Detail.setIcon(R.drawable.ic_launcher);
for (String mydetail : details)
if (mydetail.startsWith("_From:_")){
mymsg = "From: " + mydetail.replace("_From:_", "")+ "\n";
Detail.setMsgBody(mymsg);
titles.add(Detail);
if (titles.size() & 0){
ListView listView1 = (ListView)findViewById(R.id.lstmsgs);
ca = new CustomAdapter(titles , MainActivity.this);
listView1.setAdapter(ca);
if (StartInfo){
new RequestTask().execute(BaseUrl);
if (StartInfo){
new RequestTask().execute(BaseUrl);
} catch(NullPointerException e) {
TextView txtstatus = (TextView) findViewById(R.id.txtstatus);
txtstatus.setText("Status: " + "Error: " + e.getCause());
Know someone who can answer?
Share a link to this
via , , , or .
Your Answer
Sign up or
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Post as a guest
By posting your answer, you agree to the
Browse other questions tagged
Stack Overflow works best with JavaScript enabled114网址导航相关文章推荐:
linux 客户端 Socket 非阻塞connect编程
在linux进行非阻塞的socket接收数据时经常出现Resource temporarily
unavailable,errno代码为11(EAGAIN),这表明你在非阻塞模式下调用了阻塞操作,在该操作没有完成就返回这个错误,这个错误不会破坏socket的同步,不用管它,下次循环接着recv就可以。
对非阻塞socket而言,EAGAIN不是一种错误。在VxWorks和Windows上,EAGAIN的名字叫做EWOULDBLOCK。
另外,如果出现EINTR即errno为4,错误描述Interrupted ...
阅读(0) 回复(0)
其他文章推荐
同事今天问我,如何在linux下的c代码里面控制connect的阻塞时间。应用的背景是:linux下的c程序有两个目标IP需要connect,如果用阻塞方式,当其中一个IP不能连接的情况下,程序将阻塞在connect函数上。
本来以为用setsockopt修改个什么参数就可以搞定,结果baidu了半天也没有结果。倒是在网上搜到很多这样的解决方案:将connect方式设置为非阻塞方式,这样程序一旦执行就会马上返回,但问题是,到底有没有连接上...
阅读(60) 回复(0)
//tcp 此处原为阻塞式模式
ioctl(sockfd, FIONBIO, &ul);//设为非阻塞式
sendVal = send(sockfd, HeartBuff, sizeof(HeartBuff), 0);
//发送心跳
ioctl(sockfd, FIONBIO, &ul); //设置为阻塞模式
阅读(30) 回复(0)
下面提供一种recvfrom的非阻塞设置方法,希望能对不清楚的同仁能有所帮助。
if (-1 == fcntl(isocketfd, F_SETFL, O_NONBLOCK))
printf(&fcntl socket error!\n&);
return -1;
int isocketLen = sizeof(struct sockaddr_in);
/* set recvfrom from server timeout */
tv.tv_sec = TIME_...
阅读(60) 回复(0)
下面提供一种recvfrom的非阻塞设置方法,希望能对不清楚的同仁能有所帮助。
if (-1 == fcntl(isocketfd, F_SETFL, O_NONBLOCK))
printf(&fcntl socket error!\n&);
return -1;
int isocketLen = sizeof(struct sockaddr_in);
/* set recvfrom from server timeout */
tv.tv_sec = TIME_...
阅读(30) 回复(0)
http://blog.chinaunix.net/uid--id-3755264.html
三、异步阻塞模式
另外一个阻塞解决方案是带有阻塞通知的非阻塞 I/O。
在这种模型中,配置的是非阻塞 I/O,然后使用阻塞 select 系统调用来确定一个 I/O 描述符何时有操作。
使 select 调用非常有趣的是它可以用来为多个描述符提供通知,而不仅仅为一个描述符提供通知。
对于每个提示符来说,我们可以请求这个描述符可以写数据、有读数据可用以及是否发生错误的...
网络与安全
阅读(60) 回复(0)
图 1. 基本 linux I/O 模型的简单矩阵
每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序都有自己的优点。
本节将简要对其一一进行介绍。
一、同步阻塞模式
在这个模式中,用户空间的应用程序执行一个系统调用,并阻塞,直到系统调用完成为止(数据传输完成或发生错误)。
* tcp client
#include &stdio.h&
#include &stdlib.h&
#include &sys/socket.h&
架构设计与优化
阅读(90) 回复(0)
图 1. 基本 linux I/O 模型的简单矩阵
每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序都有自己的优点。
本节将简要对其一一进行介绍。
一、同步阻塞模式
在这个模式中,用户空间的应用程序执行一个系统调用,并阻塞,直到系统调用完成为止(数据传输完成或发生错误)。
* tcp client
#include &stdio.h&
#include &stdlib.h&
#include &sys/socket.h&
架构设计与优化
阅读(30) 回复(0)
http://blog.chinaunix.net/uid--id-3755264.html
三、异步阻塞模式
另外一个阻塞解决方案是带有阻塞通知的非阻塞 I/O。
在这种模型中,配置的是非阻塞 I/O,然后使用阻塞 select 系统调用来确定一个 I/O 描述符何时有操作。
使 select 调用非常有趣的是它可以用来为多个描述符提供通知,而不仅仅为一个描述符提供通知。
对于每个提示符来说,我们可以请求这个描述符可以写数据、有读数据可用以及是否发生错误的...
网络与安全
阅读(0) 回复(0)
http://blog.chinaunix.net/uid--id-3755264.html
三、异步阻塞模式
另外一个阻塞解决方案是带有阻塞通知的非阻塞 I/O。
在这种模型中,配置的是非阻塞 I/O,然后使用阻塞 select 系统调用来确定一个 I/O 描述符何时有操作。
使 select 调用非常有趣的是它可以用来为多个描述符提供通知,而不仅仅为一个描述符提供通知。
对于每个提示符来说,我们可以请求这个描述符可以写数据、有读数据可用以及是否发生错误的...
网络与安全
阅读(0) 回复(0)
图 1. 基本 linux I/O 模型的简单矩阵
每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序都有自己的优点。
本节将简要对其一一进行介绍。
一、同步阻塞模式
在这个模式中,用户空间的应用程序执行一个系统调用,并阻塞,直到系统调用完成为止(数据传输完成或发生错误)。
* tcp client
#include &stdio.h&
#include &stdlib.h&
#include &sys/socket.h&
架构设计与优化
阅读(0) 回复(0)
盛拓传媒:
北京皓辰网域网络信息技术有限公司. 版权所有
北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证:编号(京)字第1149号
ITPUB推荐文章解答你所有技术难题

我要回帖

更多关于 eagain in recvfrom 的文章

 

随机推荐