What is gunicorn app.wsgi actually doing in heroku?
No, the port is whatever Heroku wants it to be. Since they're running many many sites, they need to dynamically choose a port to serve each one on. They provide that port in the PORT environment variable, and the Procfile takes that value and binds gunicorn to it.
I don't quite understand how this works, and I've been searching everywhere but didn't quite find the answer. 
So when I deploy a django app on heroku the other day I was using daphne with this in the Procfile : 
daphne app.asgi:application --port $PORT --bind 0.0.0.0 -v2
The app works just fine and it make sense (I heard that heroku dynamically assigns the port). But how does the following code knows how to bind it's port, isn't it always 8000 by default ?

gunicorn app.asgi

Sorry for the silly question. I'm a newbie in devops stuff