이유 : THIS 이유에 대해 뭔가 새로운 시도 - 일부 시스템 호출을 사용하여 소켓을 닫습니다.리눅스에서 클로징 소켓을 강제로 만드는 방법은 무엇입니까?
두 단어의 상황 - mysql 라이브러리 (C API, 자세한 정보는 링크 참조)의 쿼리 제한 시간을 설정할 수 없으므로 소켓을 닫아 라이브러리가 어떻게 반응하는지 확인하려고합니다. 아마 이것은 좋은 생각이 아니지만 여전히 시도하고 싶습니다.
다음은 내가 한 일입니다. 시작된 또 다른 스레드가 있습니다. 타이머입니다. 따라서 특정 제한 시간이 지난 후 (예를 들어 10 초) 응답이 없으면 소켓을 닫고 싶습니다. MYSQL 구조체는 구조체이기도 한 net
멤버를 가지고 있으며 fd
을 보유하고 있습니다. 그러나 이것을 시도 할 때 :
shutdown(m_pOwner->m_ptrDBConnection->m_mysql.net.fd, SHUT_RDWR);
close(m_pOwner->m_ptrDBConnection->m_mysql.net.fd);
아무 일도 일어나지 않습니다. shutdown
및 close
에서 반환 값은 0
하지만, 60 초 대기 후 DB에서 반환 된 결과가 있기 때문에 소켓은 여전히 (열, 즉 mysql 클라이언트는 여전히 DB에서 응답을 기다리고 있다는 것을 의미한다.
하나를 아이디어
감사
편집 -?. 내가 소켓을 닫으려고하지만 실제 문제가있는 동안 예, 실행 트랜잭션이있다 - 나는 쿼리를 종료 할 수없고 연결을 닫습니다 , 아무것도, 나는 전체 시간 초과를 기다리고 싶지 않습니다. 그것은 20 분 30 초입니다. 이런 식으로. 그래서 내가 무차별 공격을 찾고 있어요. :/
올바른 소켓인지 확인 하시겠습니까? –
필자는'fd'가 올바른 FD라고 생각합니다. 열린 파일에 따라 달라집니다. 또한 이것은 MySQL 객체에서 FD를 보유 할 수있는 유일한 필드입니다 (struct, 실제로). –
@ Nikolai - 어느 소켓이 어느 포트 번호에 해당하는지 알 수있는 방법이 있습니까? 이것이 올바른 소켓인지 100 % 확신 할 수 있습니까? (OS-RHEL4) –