QTcpSocket을 사용하여 피어에 연결을 시도하는 Linux Qt5/C++ 응용 프로그램을 작성하고 있습니다. 전화 :Linux에서 setsockopt를 사용하여 연결 시간 제한을 설정하십시오.
tcpsocket->connectToHost(address,port,options)
피어를 사용할 수있을 때 바로 사용할 수 있으며 즉시 연결됩니다. 그러나 피어를 사용할 수없는 경우 : 위의 첫 번째 호출 할 때 연결 SocketTimeoutError (5) 받기 전에 1 분 기다립니다. 그런 다음 Connection을 호출 할 때마다 ConnectionRefusedError (0)가 수신되거나 1 분 (테스트 된 시스템에 따라 다름)을 기다릴 수도 있습니다.
초기 연결 대기 시간을 줄이기 위해 사용할 수있는 setsockopt가 있습니까?
내가 잃어버린 연결 (아래 참조)을 알리기 위해 이미 소켓 옵션을 설정했다는 것을 지적해야합니다. 희망이는 일분 초기 연결 오류 지연의 원인이되지 않습니다
int enableKeepAlive = 1;
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &enableKeepAlive, sizeof(enableKeepAlive));
int maxIdle = 5; /* seconds */
setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &maxIdle, sizeof(maxIdle));
int count = 3; // send up to 3 keepalive packets out, then disconnect if no response
setsockopt(fd, SOL_TCP, TCP_KEEPCNT, &count, sizeof(count));
int interval = 2; // send a keepalive packet out every 2 seconds (after the 5 second idle period)
setsockopt(fd, SOL_TCP, TCP_KEEPINTVL, &interval, sizeof(interval));
Google에서 setsockopt (socket_handle, SOL_TCP, OPT_CONNECT_TIMEOUT 및 option, sizeof (옵션))에 대한 참조가 하나 있지만 OP_CONNECT_TIMEOUT이 없으므로 컴파일되지 않습니다. (적어도 내 헤더에는 포함되지 않음) – TSG