title: java.net.SocketException: socket failed: EPERM (Operation not permitted)
body: <p>I am working on an Android Studio project with several activities. I am currently trying to read the output from a Java Servlet on localhost but it seems to be crashing due to a socket permission.</p>
  
  <p>I've made a new project, used the exact same code and worked perfectly. So I dont understand why is not willing to work on my project. </p>
  
  <pre><code>public class LoginActivity extends AppCompatActivity {
  
  
  String apiUrl = "http://10.0.2.2:8080/ProyectService/Servlet?action=login";
  EditText username;
  EditText password;
  AlertDialog dialog;
  Usuario session;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      // Inicializacion de ventana
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_login);
      getSupportActionBar().hide();
  
      // Inicializacion de componentes
      username = findViewById(R.id.username);
      password = findViewById(R.id.password);
  
      // Inicializacion de funcionalidad de botones
      Button button= (Button) findViewById(R.id.login);
      button.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {
              UserLoginTask mAuthTask = new UserLoginTask();
              mAuthTask.execute();
          }
      });
  
      password = findViewById(R.id.password);
      createAlertDialog("Usuario o Contraseña Incorrectos");
      }
  
      private void createAlertDialog(String message){
      AlertDialog.Builder builder = new AlertDialog.Builder(this);
      builder.setMessage(message)
              .setTitle("Error");
      dialog = builder.create();
      }
  
  
  
      // ASYNCRONUS NETWORK PROCESS
  
      public class UserLoginTask extends AsyncTask&lt;String, String, String&gt; {
  
      @Override
      protected void onPreExecute() {
      }
  
  
      @Override
      protected String doInBackground(String... params) {
  
          // implement API in background and store the response in current variable
          String current = "";
          try {
              URL url;
              HttpURLConnection urlConnection = null;
              try {
                  url = new URL(apiUrl);
                  System.out.println(apiUrl);
                  urlConnection = (HttpURLConnection) url
                          .openConnection();
  
                  InputStream in = urlConnection.getInputStream();
  
                  InputStreamReader isw = new InputStreamReader(in);
  
                  int data = isw.read();
                  while (data != -1) {
                      current += (char) data;
                      data = isw.read();
                      //System.out.print(current);
  
                  }
                  System.out.print(current);
                  // return the data to onPostExecute method
                  return current;
  
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  if (urlConnection != null) {
                      urlConnection.disconnect();
                  }
              }
  
          } catch (Exception e) {
              e.printStackTrace();
              return "Exception: " + e.getMessage();
          }
          return current;
          }
      }
  
      protected void onPostExecute(String success) {
          Log.i(success, "");
         //attemptLogin();
      }
  }
  </code></pre>
  
  <p>I Expect it to read the data but it crashes at this line: </p>
  
  <pre><code>InputStream in = urlConnection.getInputStream();
  </code></pre>
  
  <p>This is the error output:</p>
  
  <pre><code>java.net.SocketException: socket failed: EPERM (Operation not permitted)
  at java.net.Socket.createImpl(Socket.java:492)
  at java.net.Socket.getImpl(Socket.java:552)
  at java.net.Socket.setSoTimeout(Socket.java:1180)
  at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:143)
  at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
  at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
  at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
  at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248)
  at com.example.controller.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:114)
  at com.example.controller.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:93)
  at android.os.AsyncTask$3.call(AsyncTask.java:378)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
  at java.lang.Thread.run(Thread.java:919)
  </code></pre>