setsockopt 예제

수준 인수는 옵션이 있는 프로토콜 수준을 지정합니다. 소켓 수준에서 옵션을 설정하려면 레벨 인수를 SOL_SOCKET으로 지정합니다. 다른 수준에서 옵션을 설정하려면 옵션을 제어하는 프로토콜에 적합한 수준 식별자를 제공합니다. 예를 들어 옵션이 TCP(전송 제어 프로토콜)에 의해 해석됨을 나타내려면 헤더에 정의된 대로 IPPROTO_TCP로 수준을 설정합니다. setockopt() 함수는 소켓 동작을 제어하는 수단을 갖춘 응용 프로그램 입니다. 응용 프로그램 에서는 setockopt()를 사용하여 버퍼 공간을 할당하거나 시간 시간을 제어하거나 소켓 데이터 브로드캐스트를 허용할 수 있습니다. 헤더는 setockopt()에 사용할 수 있는 소켓 수준 옵션을 정의합니다. 다음 구조인 IAS_SET은 IRLMP_IAS_SET setockopt 옵션과 함께 로컬 IAS 데이터베이스를 관리하는 데 사용됩니다. 성공적으로 완료되면 setockopt()는 0을 반환합니다.

그렇지 않으면 -1이 반환되고 오류를 나타내기 위해 errno가 설정됩니다. 다음 표에는 setockopt 함수에서 지원하는 몇 가지 일반적인 옵션이 나열됩니다. 유형 열은 optval 매개 변수에 의해 해결된 데이터 유형을 식별합니다. 설명 열은 소켓 옵션에 대한 몇 가지 기본 정보를 제공합니다. 소켓 옵션의 전체 목록과 자세한 정보(예: 기본값)는 소켓 옵션 아래의 자세한 항목을 참조하십시오. setockopt() 함수는 level 인수에 의해 지정된 프로토콜 수준에서 option_name 인수에 의해 지정된 옵션을 해당 파일 설명자와 연결된 소켓에 대한 option_value 인수로 가리키는 값으로 설정해야 합니다. 소켓 인수. 이것은 소켓을 만들고 keepalive가 비활성화된 것을 보여 주는 작은 예입니다. option_name 인수는 설정할 단일 옵션을 지정합니다. option_name 인수와 지정된 옵션은 해석을 위해 적절한 프로토콜 모듈로 전달됩니다.

헤더는 소켓 수준 옵션을 정의합니다. 옵션은 다음과 같습니다 : 나는 당신이 (시간 시간 0) SO_LINGER 옵션을 사용해야한다고 생각합니다. 이 경우 프로그램을 닫은 직후 연결이 종료됩니다. 다음에 다시 시작하면 다시 바인딩할 수 있습니다. 소켓, 바인드(), endprotoent(), getockopt(), 소켓(), IEEE Std 1003.1-2001의 기본 정의 볼륨, , // 프로토콜 정보를 가져옵니다. WSA_PROTOCOL_INFO 응용 프로그램을 작성할 때 수행할 수 있는 가장 아름다운 방법은 가능한 한 사용자 지정할 수 있도록 하고 결정을 강제하지 않는 것입니다. 사용자의 행복을 고려하려면 keepalive를 구현하고 사용자가 구성 매개 변수 또는 명령줄의 스위치를 사용하여 사용할지 여부를 결정하도록 해야 합니다. . 이것은 내가 라즈베리 파이에 내 자신의 http 서버를 실행 하는 수신 시간 설정을 설정 하는 사소한 샘플. 문제는 프로그램을 중지하고 다시 시작하면 포트를 더 이상 사용할 수 없다는 것입니다. 때로는 요청을 많이받을 때 동일한 문제가 발생합니다.

오류가 발생하더라도 포트를 계속 사용할 수 있도록 SO_REUSEADDR을 사용하고 싶지만 설정해도 운이 없었습니다. 다음은 내 코드입니다. 내가 얻는 오류는 “바인딩에 오류 : 주소이미 사용 중입니다”입니다. IrDA는 IrDA 기반 정보를 저장하는 IAS 데이터베이스를 제공합니다. IAS 데이터베이스에 대한 제한된 액세스는 Windows 소켓 2 인터페이스를 통해 사용할 수 있지만 이러한 액세스는 일반적으로 응용 프로그램에서 사용되지 않으며 주로 Windows 소켓 2 IrDA를 준수하지 않는 비 Windows 장치에 대한 연결을 지원하기 위해 존재합니다. 규칙. . 첫 번째 매개 변수는 이전에 소켓(2)으로 만든 소켓입니다. 두 번째는 SOL_SOCKET이어야 하며, 세 번째는 SO_KEEPALIVE여야 합니다. 네 번째 매개 변수는 부울 정수 값이어야 하며, 마지막 매개 변수는 이전에 전달된 값의 크기인 반면 옵션을 사용하도록 설정하려는 경우를 나타냅니다. 그런 다음 recvfrom()를 호출하면 데이터가 전송되지 않으므로 시간 시간이 지남에 따라 실패합니다.