unidad sierra puedo pro macbook mac iniciar imac high directo descargar crear conectar actualizar actualizacion acceso macos sockets networking go httpserver

macos - sierra - ir: el servidor http no funciona en osx



descargar mac os sierra (4)

Me gustaría ver el resultado de ''ifconfig -a''.

Esto huele como un problema de configuración local; No puedo reproducir esto en OS X 10.11.4, Go 1.6

Mi WAG es que un dispositivo de túnel está realmente usando 127.0.0.1, no el dispositivo de vuelta de bucle.

El servidor http de ejemplo no funciona para mí. Código fuente:

package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) } func main() { http.HandleFunc("/", handler) http.ListenAndServe("127.0.0.1:8080", nil) }

Cuando trato de conectar todo lo que obtengo es:

$ curl 127.0.0.1:8080 curl: (7) Failed to connect to 127.0.0.1 port 8080: Operation timed out $ nc -v -G 5 127.0.0.1 8080 nc: connectx to 127.0.0.1 port 8080 (tcp) failed: Operation timed out

Mientras que nc intenta conectar, tcpdump muestra solo paquetes SYN:

$ tcpdump -i lo0 port 8080 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes 18:21:30.906638 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569352 ecr 0,sackOK,eol], length 0 18:21:31.006824 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569452 ecr 0,sackOK,eol], length 0 18:21:31.106989 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569552 ecr 0,sackOK,eol], length 0 18:21:31.208141 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569653 ecr 0,sackOK,eol], length 0 18:21:31.308288 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569753 ecr 0,sackOK,eol], length 0 18:21:31.408336 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118569853 ecr 0,sackOK,eol], length 0 18:21:31.609143 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118570053 ecr 0,sackOK,eol], length 0 18:21:32.011215 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118570453 ecr 0,sackOK,eol], length 0 18:21:32.812512 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118571253 ecr 0,sackOK,eol], length 0 18:21:34.414686 IP localhost.52799 > localhost.http-alt: Flags [S], seq 3375761924, win 65535, options [mss 16344,nop,wscale 5,nop,nop,TS val 118572853 ecr 0,sackOK,eol], length 0

Y aquí está la última parte de la salida dtruss del lado del servidor (comenzando desde la llamada al socket):

socket(0x2, 0x1, 0x0) = 3 0 fcntl(0x3, 0x2, 0x1) = 0 0 fcntl(0x3, 0x3, 0x0) = 2 0 fcntl(0x3, 0x4, 0x6) = 0 0 setsockopt(0x3, 0xFFFF, 0x20) = 0 0 setsockopt(0x3, 0xFFFF, 0x4) = 0 0 bind(0x3, 0xC8200BA6AC, 0x10) = 0 0 listen(0x3, 0xFDE8, 0x10) = 0 0 kqueue(0x3, 0xFDE8, 0x10) = 4 0 fcntl(0x4, 0x2, 0x1) = 0 0 kevent(0x4, 0xC8200558C0, 0x2) = 0 0 getsockname(0x3, 0xC82005592C, 0xC820055928) = 0 0 accept(0x3, 0xC820055AA4, 0xC820055A94) = -1 Err#35 kevent(0x4, 0x0, 0x0) = 0 0 select(0x0, 0x0, 0x0, 0x0, 0x700000080DE8) = 0 0

Nada más aparece cuando ejecuto nc, por lo que ni siquiera se da cuenta de los intentos de conexión.

No tengo el firewall habilitado, todo lo demás funciona, solo los programas Go tienen este problema (en particular, no puedo usar docker-machine)

¿Cómo lo arreglo?

Editar: Supongo que # Err35 es:

#define EDEADLK 35 /* Resource deadlock would occur */

... ¿wat?

Edit2:

  • ir: versión go1.6 darwin / amd64
  • OSX: 10.11.4

El servidor no está saliendo, escucha indefinidamente.

Edit3:

Intenté tanto "ir a construir" como "ir a correr", sin diferencia

Usar localhost en lugar de 127.0.0.1 - sin diferencia

Usando w.Write([]byte(fmt.Sprintf("Hi there, I love %s!", r.URL.Path[1:])) lugar - no hay diferencia. Btw - dice nc: connectx to 127.0.0.1 port 8080 (tcp) failed: Operation timed out , por lo que el nc: connectx to 127.0.0.1 port 8080 (tcp) failed: Operation timed out conexión expiró, no el de lectura

ifconfig -a y netstat -r salida: https://gist.github.com/mabn/ed171f180725b563d32bb86d5ec61988


¿Tiene Cisco Anyconnect instalado? Si es así, busca websecurity_uninstall.sh y desinstala websecurity

sudo /opt/cisco/anyconnect/bin/websecurity_uninstall.sh

Reenvía el puerto 8080 al puerto 5001 y no puede usar netstat, lsof o cualquiera de las herramientas normales para ver por qué nada puede usar el puerto 8080.



¡Lo arreglé! Recordé que un rato antes intenté aumentar el límite de conexiones en mi máquina y apliqué los cambios descritos aquí: https://apple.stackexchange.com/a/169606

Revertirlos solucionó el problema. Esto es lo que ayudó:

sudo rm /etc/sysctl.conf sudo sysctl kern.ipc.somaxconn=128 sudo rm /Library/LaunchDaemons/limit.maxproc.plist sudo rm /Library/LaunchDaemons/limit.maxfiles.plist

Por cierto: después de un poco más de investigación descubrí que:

  • el problema era que accept () syscall volvía EAGAIN cada vez pero no aceptaba ninguna conexión
  • se comportó igual para las conexiones sin bloqueo en los programas C y Java

Pero todavía no sé por qué exactamente estaba roto.