recvfrom 예제

예를 들어 Linux는 이 보조 데이터 메커니즘을 사용하여 UNIX 도메인 소켓을 통해 확장 오류, IP 옵션 또는 파일 설명자를 전달합니다. from 매개 변수가 0이 아니고 소켓이 연결 지향적이지 않은 경우(예: SOCK_DGRAM 유형) 데이터를 보낸 피어의 네트워크 주소가 해당 sockaddr 구조로 복사됩니다. fromlen이 가리키는 값은 이 구조의 크기로 초기화되고 반환시 sockaddr 구조에 저장된 주소의 실제 크기를 나타내기 위해 수정됩니다. 이 예제에서 recvfrom 소켓 설명자 s에 데이터 그램을 수신 하 고 에서 버퍼에 배치 합니다. 소켓에 대한 논의에서 TCP/IP 프로토콜을 사용하는 소켓과 연결 지향 소켓을 사용한 프로그래밍의 예를 다루었습니다. 여기서는 UDP/IP를 통해 연결없는 소켓을 사용하는 예제를 간략하게 살펴보겠습니다. 메시지 지향 소켓의 경우 지정된 버퍼 크기까지 큐에 대기된 첫 번째 메시지에서 데이터가 추출됩니다. 데이터그램 또는 메시지가 지정된 버퍼보다 큰 경우 버퍼는 데이터그램의 첫 번째 부분으로 채워지고 recvfrom는 WSAEMSGSIZE 오류를 생성합니다. 신뢰할 수 없는 프로토콜(예: UDP)의 경우 초과 데이터가 손실됩니다. 수신된 패킷에 데이터가 없는 경우 UDP의 경우(비어 있음) recvfrom 함수 함수의 반환 값은 0입니다. recvfrom()의 사용의 예는 getaddrinfo(3)에 도시되어 있다. 이 예제는 포트를 0으로 설정하여 사용 가능한 포트 번호를 선택하도록 운영 체제에 요청합니다.

특정 포트 번호를 사용하려면 줄을 변경세 루틴 모두 성공적으로 완료시 메시지 길이를 반환합니다. 메시지가 제공된 버퍼에 맞지 않을 정도로 길면 메시지가 수신되는 소켓 유형에 따라 초과 바이트가 삭제될 수 있습니다. TCP 소켓을 사용하면 서버가 수신 대기 시스템 호출을 통해 수신 대기를 위한 소켓을 설정한 다음 수락을 호출하여 연결을 기다립니다. UDP는 연결되지 않습니다. 서버는 소켓이 있으면 즉시 메시지를 수신할 수 있습니다. recvfrom 시스템 호출을 사용하여 특정 전송 주소(IP 주소 및 포트 번호)에서 들어오는 데이터그램을 기다립니다. 또한 recvfrom()는 구조형 sockaddr*를 사용하여 데이터가 어디에서 왔는지 알려주며 구조형 sockaddr의 크기로 채울 것입니다. (또한 에서 초기화 해야 합니다.) 또는 구조형 sockaddr에서 크기로.

대역 외 데이터를 수신합니다.